Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新自己变量的函数_C#_Coding Style_Refactoring - Fatal编程技术网

C# 更新自己变量的函数

C# 更新自己变量的函数,c#,coding-style,refactoring,C#,Coding Style,Refactoring,我想知道应该如何测试它,因为如果我想测试其中一个,它会迫使我在每个测试中加入两个断言(它可能会长大) 我应该这样测试吗 private Foo sut; [TestCase(0, 1)] [TestCase(-1, 1)] [TestCase(int.MaxValue, 1)] public void ShouldUpdateStatsAndCheckA(int a, int b) { sut.UpdateVars(a, b); sut.A.ShouldBe(a); } [

我想知道应该如何测试它,因为如果我想测试其中一个,它会迫使我在每个测试中加入两个断言(它可能会长大)

我应该这样测试吗

private Foo sut;

[TestCase(0, 1)]
[TestCase(-1, 1)]
[TestCase(int.MaxValue, 1)]
public void ShouldUpdateStatsAndCheckA(int a, int b)
{
    sut.UpdateVars(a, b);

    sut.A.ShouldBe(a);
}

[TestCase(1, 0)]
[TestCase(1, -1)]
[TestCase(1, int.MaxValue)]
public void ShouldUpdateStatsAndCheckB(int a, int b)
{
    sut.UpdateVars(a, b);

    sut.B.ShouldBe(b);
}

这对我来说似乎很可怕。

这是一种很好的测试方法,因为您应该尽量避免在一次测试中出现大量断言。然而,这不应被视为一项规则,而应被视为一项建议。通常,每个测试都会断言一个预期的行为

如果您发现自己必须创建大量的测试,这样您就不会在一个测试中放置多个断言,那么很可能您的模型是错误的,并且您的方法做得太多


有一篇文章是关于如何处理多个断言的,这可能会有所帮助。

好吧,这里“correct”的含义很广泛,因为你从来没有说过它们应该做什么(如果它们应该将变量设置为零,如果传递的值不是一个有效的数字,或者将它们设置为相应的数字,那么是的,它们可能会工作)。此外,如果方法趋于增长,则必须考虑其他方法和设计模式。方法应该保持简短,以便易于测试和维护。理想情况下,每个测试仍然有一个断言。一(组)测试针对A,另一(组)测试针对B。这样,当A失败时,你知道需要一段时间才能为B执行测试。Kopranb是正确的——正确性意味着你已经实现了一个规范,而你没有给我们该规范。这两种方法的规格是什么?一旦你有了一个规范,你就可以编写测试用例来确定代码是否正确。@kopranb我已经编辑了这个问题,我希望它现在会更清楚。
private Foo sut;

[TestCase(0, 1)]
[TestCase(-1, 1)]
[TestCase(int.MaxValue, 1)]
public void ShouldUpdateStatsAndCheckA(int a, int b)
{
    sut.UpdateVars(a, b);

    sut.A.ShouldBe(a);
}

[TestCase(1, 0)]
[TestCase(1, -1)]
[TestCase(1, int.MaxValue)]
public void ShouldUpdateStatsAndCheckB(int a, int b)
{
    sut.UpdateVars(a, b);

    sut.B.ShouldBe(b);
}