我长期以来一直是Python的doctest库的粉丝,原因很简单,注释不仅有用而且可以在验证正确行为时使用。最近,我偶然发现了(似乎)鲜为人知的System.Diagnostics.ConditionalAttribute,这可以轻松地允许你在类本身内部定义类方法的测试。以下是一个简单的示例:
using System.Diagnostics;
using NUnit.Framework;
namespace ClassLibrary1
{
public class Class1
{
public static int AddTwoNumbers(int x, int y)
{
return x + y;
}
[Conditional("DEBUG")]
[TestCase(1, 1, 2)]
[TestCase(1, 2, 3)]
[TestCase(2, 1, 3)]
[TestCase(11, 7, 18)]
public static void TestAddTwoNumbers(int x, int y, int sum)
{
int actual = AddTwoNumbers(x, y);
Assert.AreEqual(sum, actual);
}
}
}
通过这样做,您可以创建一个调试程序集来运行测试以及一个生产程序集,其中所有内容都被剥离,类似于FAKE可以构建项目的方式。问题是,您应该这样做吗?这是一个好习惯吗?为什么或为什么不是?
您还会发现,此示例实际上并未按照我所期望的那样工作。我不确定为什么属性允许编译测试方法。有任何想法吗?