【发布时间】:2011-02-23 14:08:49
【问题描述】:
有没有用 NUnit 测试带有多个参数的复杂函数的通用方法?我认为测试所有条件非常困难或不可能。
恐怕函数中没有预期的参数组合在测试中也没有预期。
所以预期的条件不会失败,而是意外。
谢谢
【问题讨论】:
有没有用 NUnit 测试带有多个参数的复杂函数的通用方法?我认为测试所有条件非常困难或不可能。
恐怕函数中没有预期的参数组合在测试中也没有预期。
所以预期的条件不会失败,而是意外。
谢谢
【问题讨论】:
这应该不难测试。如果是,则该方法不是为可测试性而设计的,这是一种代码异味,告诉您需要对其进行重构。
我倾向于在这些情况下编写测试如下(其他人可能有更好的建议):
如果你的方法需要很多参数,可以考虑重构它以获取一个带有信息的对象,这样你就可以将它的规则封装在对象中,并将对象传递给方法。
【讨论】:
对于 NUnit 中的数据驱动测试,有 [TestCase]attribute。单元测试通常不会测试所有可能的场景。他们只是测试一组有代表性的输入,这些输入很好地覆盖了 SUT 在各种输入上的作用。只需选择一些特征输入,就可以了。
【讨论】:
不知道这是否是您正在寻找的东西,但有一个由 Microsoft 研究创建的自动化单元测试生成器,名为 PEX。
Pex 自动生成具有高代码覆盖率的测试套件。直接从 Visual Studio 代码编辑器中,Pex 找到您的方法的有趣输入输出值,您可以将其保存为具有高代码覆盖率的小型测试套件。 Microsoft Pex 是一个用于测试 .NET Framework 应用程序的 Visual Studio 插件。
【讨论】:
使用RowTest类似的问题可以在
找到看看@“Sam Holder”的回复,我从中复制了代码,做了一些调整。
[TestFixture]
public class TestExample
{
[RowTest]
[Row( 1)]
[Row( 2)]
[Row( 3)]
[Row( 4)]
public void TestMethodExample(int value)
{
...
...
...
Assert.IsTrue("some condition ..");
}
}
【讨论】:
我同意 Mike Hofer 的观点,该问题表明代码有异味。
不过,NUnit has a Combinatorial attribute 可能会对您有所帮助,如果您不进行重构/重新设计的话。
【讨论】: