我读过有关在单元测试中生成自动值但无法找到的库的库。基本上,我想要的不是:
[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));
}
答案 0 :(得分:7)
我认为你可以使用PEX!
Pex自动生成一个代码覆盖率高的小型测试套件 对于.NET程序。为此,Pex执行系统程序 分析(使用动态符号执行,类似于路径限制 模型检查)确定参数化单元测试的测试输入。 Pex通过监视执行跟踪来了解程序行为。 PEX 使用约束求解器生成运动的新测试输入 不同的程序行为。
答案 1 :(得分:3)
我还没有使用过这些,但我也对这个话题感兴趣。
这是另一个看起来值得一试的工具的作者round up of all of them,名为QuickGenerate。
答案 2 :(得分:1)
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));
}
还有创建随机数据的方法。
答案 3 :(得分:1)
AutoPoco允许您为测试生成对象。
答案 4 :(得分:0)
您可以使用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
您可以设置单元测试,以便不是在测试方法中键入值,而是可以从数据源中检索值。对数据源中的每一行连续运行单元测试。这样可以在单次测试中轻松测试各种输入。
指定一系列值和预期结果并对其进行测试。
答案 5 :(得分:0)
AutoFixture(http://autofixture.codeplex.com/)是一个很棒的库。它可以在一行代码中轻松生成具有深层次子层次的对象。