Kon*_*ten 2 c# testing nunit automated-tests
实际问题在底部。我已经尝试过使帖子尽可能短,并且希望我已经设法解决了大部分不清楚的部分。
根据文档,我们在nUnit中(还有其他属性)
很长一段时间以来,我一直在阅读文档并使用所有上述内容,因此我对它们的行为非常熟悉。但是,一个想法一直困扰着我,而现在,我很尴尬地问。
public int Output(int input) { return input + 1; }
Run Code Online (Sandbox Code Playgroud)
我们可以为上述简单方法设置测试的方法,我可以想到四种方法。我几乎到处都可以看到它们中的大多数,但是我不能真正分辨出它们是否是导致相同的引擎盖下功能的不同口味,或者我根本不知道它们之间存在技术差异。
例如,也许#2可以并行化,而另一个不能并行化(这只是一个虚拟的例子,表明可能存在我们不知道的魔术)。
仅测试属性
[Test]
public void OutputIsWorking()
{
List<int> inputs = new List<int>{ 1, 2, 3 };
for(int i = 0; i < inputs.Count; i++)
Assert.That(inputs[i] + 1, Is.EqualTo(Output(input)));
}
Run Code Online (Sandbox Code Playgroud)
测试和值属性组合
[Test]
public void OutputIsGreat([Values(1,2,3)] int input)
{
int output = Output(input);
Assert.That(input + 1, Is.EqualTo(output));
}
Run Code Online (Sandbox Code Playgroud)
仅TestCase属性
[TestCase(1, 2)]
[TestCase(2, 3)]
[TestCase(3, 4)]
public void DivideTest(int input, int expectation)
{
int output = Output(input);
Assert.That(output, Is.EqualTo(expectation));
}
Run Code Online (Sandbox Code Playgroud)
TestCase和ExpectedResult属性组合
[TestCase(1, ExpectedResult = 2)]
[TestCase(2, ExpectedResult = 3)]
[TestCase(3, ExpectedResult = 4)]
public void DivideTest(int input)
{
return Output(input);
}
Run Code Online (Sandbox Code Playgroud)
因此,问题是这些方法是否在技术层面上有所不同,或者仅仅是目前最喜欢的代码。我们倾向于减少开发人员需要做出的选择,并且提供如此广泛的等效选项似乎是多余和令人困惑的。
如果它们不同,那么我想知道如何。我没有在文档中找到。如果他们没有不同,那我很好奇。我们是在谈论“让人们决定他们喜欢的东西”还是“这是无法消除的遗留事物”?
有一些细微的差异。
测试案例数
在第一个示例(Test仅属性)中,您正在编写一个测试用例。如果对输入的测试失败2,则整个测试将失败,并且3将完全不对输入进行测试。
在所有其他示例中,您将分别编写测试用例,因此即使2失败,NUnit仍将测试所有剩余的用例,然后在测试报告中进行显示。
当您有多个测试用例时,也可以选择在NUnit 3上并行执行测试。如果使用其他运行程序(例如NCrunch),则还可以通过使用单独的测试用例轻松获得并行性。
组合式
当您使用时ValuesAttribute,并且您有多个参数,NUnit将执行输入值的所有可能组合作为单独的测试。通过使用TestCaseAttribute,您必须自己编写所有输入。
您可以使用CombinatorialAttribute来显式标记,或使用PairwiseAttribute或SequentialAttribute用于其他方法。
其他差异大多只是偏好问题。
使用ExpectedResult可以使您不必编写断言(它由NUnit隐式插入),而不必编写更少的代码无疑是一件好事。我自己不会写“ TestCase仅属性”示例,我宁愿使用此ExpectedResult功能,因为我认为这种方式更具可读性(输出参数突出)。
我看好TestCase了Values,当我不想要的组合行为,但是当你有一个参数,它只是一个风格问题。使用几个输入参数,无论如何您可能都需要两种方法。
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |