C#库自动生成单元测试的值

时间:2011-07-21 10:21:38

标签: c# unit-testing tdd

我读过有关在单元测试中生成自动值但无法找到的库的库。基本上,我想要的不是:

[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));
}

6 个答案:

答案 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/)是一个很棒的库。它可以在一行代码中轻松生成具有深层次子层次的对象。