【发布时间】:2016-09-04 08:33:43
【问题描述】:
实际问题在底部。我已经尝试使帖子尽可能简短,我希望我已经设法纠正了问题中大部分不清楚的部分。
根据文档,我们在 nUnit 中(以及其他属性)
长期以来,我一直在阅读文档并使用上述所有内容,因此我非常熟悉它们的行为方式。然而,一个想法一直困扰着我,到现在,我都不好意思问了。
public int Output(int input) { return input + 1; }
我们可以为上述简单方法设置测试的方式,我可以想到四种方法。我几乎在任何地方都看到了它们中的大多数,但我无法确定它们是否是不同的风格导致相同的底层功能,或者是否存在我根本不知道的技术差异。
例如 - 也许 #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)));
}
Test 和 Values 属性相结合
[Test]
public void OutputIsGreat([Values(1,2,3)] int input)
{
int output = Output(input);
Assert.That(input + 1, Is.EqualTo(output));
}
仅测试用例属性
[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));
}
TestCase 和 ExpectedResult 属性结合
[TestCase(1, ExpectedResult = 2)]
[TestCase(2, ExpectedResult = 3)]
[TestCase(3, ExpectedResult = 4)]
public void DivideTest(int input)
{
return Output(input);
}
所以,问题是这些方法是否在技术层面上有所不同,或者只是代码目前最喜欢的方式。我们更愿意减少开发人员需要做出的选择数量,而提供如此广泛的等价物似乎是多余且令人困惑的。
如果它们不同,那么我想知道如何。我在文档中没有找到。如果它们没有区别,那么我很好奇为什么。我们是在谈论“让人们决定他们喜欢什么”还是“这是无法删除的遗留问题”?
【问题讨论】:
-
我想这有点离题,但当我读到“我们更愿意减少开发人员需要做出的选择的数量”时,我会感到担心。世界是复杂的,有一些选择是肯定要做出的。 NUnit 团队非常努力地限制——甚至消除——不必要的选择。 我们是开发人员。如果您使用“我们”表明您不是其中之一,那么请停止尝试“限制开发者的选择”。如果你是一个人,这只是一种说话方式,我提前道歉。
-
@Charlie 非常有趣的一点。让我详细说明我的意思,因为我确信我们同意这一原则。首先 - 我 am 是一名开发人员。几十年来。现在,我的意思是我,作为一名开发人员,喜欢获得一组选项,然后决定使用我的技能、经验、教育和智力来选择最佳选项。然后,我会应用它。如果有标准或经过验证的方法,例如计算一个凸包,我想使用 it,因为我知道,在这种情况下,最佳方法是 那个,我不必做出任何选择.我只是应用已知最好的东西。
标签: c# testing automated-tests nunit