小编rh.*_*rh.的帖子

单元测试中的不确定性

似乎在许多单元测试中,参数化测试的值要么自己烘焙到测试中,要么以预定的方式声明.

例如,这是从nUnit的单元测试(EqualsFixture.cs)中获取的测试:

[Test]
public void Int() 
{
    int val = 1;
    int expected = val;
    int actual = val;

    Assert.IsTrue(expected == actual);
    Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

这具有确定性的优点; 如果您运行一次测试,并且它失败,它将继续失败,直到代码被修复.但是,您最终只会测试一组有限的值.

不过我不禁觉得这是浪费; 完全相同的测试可能在项目的整个生命周期中使用完全相同的参数运行数百次甚至数千次.

如何尽可能多地随机输入所有单元测试,以便每次运行都有一些新的东西?

在前面的例子中,也许:

[Test]
public void Int() 
{
    Random rnd = new Random();
    int val = rnd.Next();
    int expected = val;
    int actual = val;
    Console.WriteLine("val is {0}", val);
    Assert.IsTrue(expected == actual);
    Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

(如果代码需要一个字符串,那么每次都可以使用已知对特定函数有效的随机字符串)

好处是你运行测试的次数越多,你知道它可以正确处理的更大的可能值集.

这有用吗?邪恶?这有缺点吗?我是否完全忽略了单元测试的重点?

谢谢你的想法.

c# unit-testing

12
推荐指数
2
解决办法
579
查看次数

标签 统计

c# ×1

unit-testing ×1