有没有通过NUnit测试复杂功能的常用方法?

时间:2011-02-23 14:08:50

标签: c# .net vb.net nunit

有一种常用的方法可以使用NUnit测试具有多个参数的复杂函数吗?我认为测试每种情况都是非常困难或不可能的。

我担心在测试中也不会出现函数中不期望的参数组合。

所以预期的情况不会失败,而是出乎意料的。

由于

5 个答案:

答案 0 :(得分:5)

这根本不应该很难测试。如果是,则该方法不是为可测试性而设计的,这是一种代码气味,告诉您需要重构它。

我倾向于在这些案例中编写测试如下(其他人可能有更好的建议):

  1. 在传递所有适当的参数后,它是否按预期工作?
  2. 我认为它应该抛出预期的异常吗? (ArgumentNullException等)
  3. 对于每个参数,当我传递null,最小值和最大值时会发生什么。 (这可能非常广泛,具体取决于参数的数量。)
  4. 如果你的方法需要很多参数,可以考虑重构它以获取带有信息的对象,这样你就可以在对象中封装它的规则,并将对象传递给方法。

答案 1 :(得分:2)

对于NUnit中的数据驱动测试,有[TestCase] attribute。单元测试通常不会测试每种可能的情况。他们只是测试代表性的输入集,它们很好地覆盖了SUT在各种输入上的作用。只需选择一些特色输入,你就可以了。

答案 2 :(得分:1)

不知道这是否是您正在寻找的东西,但有一个自动单元测试生成器由Microsoft研究人员创建,名为PEX

  

Pex自动生成具有高代码覆盖率的测试套件。在Visual Studio代码编辑器中,Pex可以找到方法的有趣输入输出值,您可以将其保存为具有高代码覆盖率的小型测试套件。 Microsoft Pex是用于测试.NET Framework应用程序的Visual Studio加载项。

答案 3 :(得分:1)

使用 RowTest 可以在

找到类似的问题

C#, NUnit Assert in a Loop

看看@“Sam Holder”的回复,我从中复制了代码,几乎没有调整。

[TestFixture] 
    public class TestExample 
    {      

    [RowTest]      
    [Row( 1)]      
    [Row( 2)]      
    [Row( 3)]      
    [Row( 4)]      

    public void TestMethodExample(int value)      
    {           
              ...
              ...
              ...
              Assert.IsTrue("some condition ..");
    } 
 } 

答案 4 :(得分:0)

我同意Mike Hofer的观点,这个问题表明代码有异味。

尽管如此,NUnit has a Combinatorial attribute可能会对您有所帮助,如果您不进行重构/重新设计。