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

问题描述 投票:0回答:5

我读过有关生成自动值以供单元测试使用的库的信息,但找不到它。基本上,我想要的是:

[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));
}
c# unit-testing tdd
5个回答
7
投票

我认为你可以使用PEX

Pex 自动生成具有高代码覆盖率的小型测试套件 对于 .NET 程序。为此,Pex进行了系统化的计划 分析(使用动态符号执行,类似于路径限制 模型检查)以确定参数化单元测试的测试输入。 Pex 通过监视执行跟踪来了解程序行为。派克斯 使用约束求解器生成新的测试输入,以执行 不同的程序行为。


1
投票

AutoPoco 可让您生成用于测试的对象。


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

还有创建随机数据的方法。


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

您可以设置单元测试,这样您就可以从数据源检索值,而不是在测试方法中键入值。对数据源中的每一行连续运行单元测试。这使得在一次测试运行中测试各种输入变得很容易。

指定一系列值和预期结果并对其进行测试。


0
投票

AutoFixture (https://github.com/AutoFixture) 是一个很棒的库。它可以轻松地在一行代码中生成具有深层子级层次结构的对象。

© www.soinside.com 2019 - 2024. All rights reserved.