我们如何命名我们检查多个条件的测试方法?

San*_*box 3 unit-testing

在命名测试方法时,我遵循Roy Osherove的The Art Of Unit Testing书中指定的技术 - MethodName_Scenario_Expectation.它非常适合我的"单位"测试.但是,对于我在'controller'或'coordinator'类中编写的测试,我不一定要测试一种方法.

对于这些测试,我生成了构成一个场景的多个条件,然后我验证了期望.例如,我可以在不同的实例上设置一些属性,生成一个事件,然后验证我对控制器/协调器的期望是否得到满足.现在,我的控制器使用私有事件处理程序处理事件.在这里我的场景是,我设置了一些属性,比如3

condition1,condition2和condition3

此外,我的方案包括

提出了一个事件

我没有方法名称,因为我的事件处理程序是私有的.我如何命名这样的测试方法?

cka*_*ras 6

在这种情况下,我会使用几个测试和不同的命名约定:

  • 将测试类命名为ClassName_Scenario(因此对于同一个类,您将拥有多个测试类)
  • 命名测试方法Expectation1,Expectation2,Expectation3 ......

此外,它不是在每个测试方法中初始化上下文,而是在[SetUp]方法中初始化

所以你会有这样的事情:

[TestFixture]
public class ClassName_WhenScenarioX
{
     [SetUp]
     void InitContextForScenarioX()
     {
     }

     [Test]
     void ShouldDoY()
     {
         Assert.That(...)
     }

     [Test]
     void ShouldRaiseEventZ()
     {
         Assert.That(...)
     }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这仅在断言的执行顺序不重要时才起作用(每个测试都是独立的,即使它们都依赖于相同的初始上下文)