单元测试 - 我应该分开测试还是进行一次测试?

Ria*_*ney 8 c# unit-testing

我希望这不是一个愚蠢的问题,而是我一直在想的事情.我希望编写单元测试一个方法,其中包含一些逻辑来检查某些值是否为空.

public void MyMethod(string value1, string value2)
{
    if(value1 != null)
    {
     //do something (throw exception)
    }

    if(value2 != null)
    {
     //do something (throw exception)
    }

    //rest of method
}
Run Code Online (Sandbox Code Playgroud)

我想通过将null值传递给方法来测试它.我的问题是我应该为每个参数创建一个单元测试,还是可以创建一个单元测试,检查如果我将value1设置为null然后检查如果我将value2设置为null会发生什么.

[TestMethod]
public void TestMyMethodShouldThrowExceptionIfValue1IsNull()
{
    //test
}

[TestMethod]
public void TestMyMethodShouldThrowExceptionIfValue2IsNull()
{
    //test
}
Run Code Online (Sandbox Code Playgroud)

要么

[TestMethod]
public void TestMyMethodWithNullValues()
{
  //pass null for value1
  //check

  //pass null for value2
  //check
}
Run Code Online (Sandbox Code Playgroud)

或者它有什么不同?我想我在某个地方读到你应该限制自己每单元测试一个断言.它是否正确?

在此先感谢Zaps

Mar*_*ann 9

您应该为每个测试用例(断言)编写单元测试以避免断言轮盘.


Mic*_*rdt 6

"理想的"单元测试只测试一件事,以便准确地找出错误.

实际上,这并不像大多数TDD支持者那样重要,因为测试不会经常失败,并且发现哪个断言失败几乎没有时间与调查和解决问题所涉及的其他工作相比.

在编写测试时做额外的工作以便在失败时(可能永远不会发生)保存自己的工作是YAGNI的一种形式.

如果有多个方法除了输入更多的方法声明之外没有额外的工作,你应该这样做,但如果它导致重复的设置代码,我看到在一个测试方法中测试几个条件绝对没有错.