我读过有关生成自动值以供单元测试使用的库的信息,但找不到它。基本上,我想要的是:
[Test]
public void Test()
{
int x = 2;
int y = 5;
Assert.AreEqual(7, ObjectUnderTest.Add(x, y));
}
我想写:
[Test]
public void Test()
{
int x = Lib.Int();
int y = Lib.Int();
Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y));
}
更新:
AutoFixture 是我正在寻找的。使用 AutoFixture,我的测试将是:
[Test]
public void Test()
{
var fixture = new Fixture();
int x = fixture.CreateAnonymous<int>();
int y = fixture.CreateAnonymous<int>();
Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y));
}
我认为你可以使用PEX!
Pex 自动生成具有高代码覆盖率的小型测试套件 对于 .NET 程序。为此,Pex进行了系统化的计划 分析(使用动态符号执行,类似于路径限制 模型检查)以确定参数化单元测试的测试输入。 Pex 通过监视执行跟踪来了解程序行为。派克斯 使用约束求解器生成新的测试输入,以执行 不同的程序行为。
AutoPoco 可让您生成用于测试的对象。
NBuilder 是一个很棒的库,用于创建测试数据和对象集。它使用流畅的 API,所以恕我直言,拿起并开始使用它非常容易。
像这样(未编译测试):
[Test]
public void Test()
{
int x = Builder<int>.CreateNew().Build();
int y = Builder<int>.CreateNew().Build();
Assert.AreEqual(x + y, ObjectUnderTest.Add(x, y));
}
还有创建随机数据的方法。
您可以使用 NBuilder (http://nbuilder.org/) 来执行此操作并自动生成值。
如果您只想要随机整数(这就是您将通过 NBuilder 得到的),还有一种更简单的方法可以做到这一点,只需使用内置的 Random 类
http://msdn.microsoft.com/de-de/library/system.random.aspx
但是,如果您想要超越简单数学运算的更多灵活性和功能,我认为您真正想做的是实现数据驱动的单元测试。查看此链接,设置非常简单:
http://msdn.microsoft.com/en-us/library/ms182527(v=VS.100).aspx
您可以设置单元测试,这样您就可以从数据源检索值,而不是在测试方法中键入值。对数据源中的每一行连续运行单元测试。这使得在一次测试运行中测试各种输入变得很容易。
指定一系列值和预期结果并对其进行测试。
AutoFixture (https://github.com/AutoFixture) 是一个很棒的库。它可以轻松地在一行代码中生成具有深层子级层次结构的对象。