代码之家  ›  专栏  ›  技术社区  ›  Vaccano

在AAA单元测试语法中混合断言和ACT

  •  4
  • Vaccano  · 技术社区  · 14 年前

    混合断言和行为步骤可以吗?a a a更像是一个准则而不是一个规则吗?还是我遗漏了什么?

    这是我的测试:

    [TestMethod]
    public void CancelButtonSelected_DontCancelTwiceThenCancel_DialogCloses()
    {
        // Arrange
        IAddAddressForm form = Substitute.For<IAddAddressForm>();
        // Indicate that when Show CancelMessage is called it 
        //  should return cancel twice (saying we want to cancel the cancel)
        //  then it should return ok
        form.ShowCancelMessage().Returns(DialogResult.Cancel, 
             DialogResult.Cancel, DialogResult.OK);
    
        AddAddressController controller = new AddAddressController(form);
        AddressItem item = TestHelper.CreateAddressBob();
    
        // Act
        EnterAddressInfo(form, controller, item);
        controller.CancelButtonSelected();
        Assert.IsTrue(form.DialogResult == DialogResult.None);
    
        controller.CancelButtonSelected();
        Assert.IsTrue(form.DialogResult == DialogResult.None);
    
        controller.CancelButtonSelected();
    
        // Assert
        Assert.IsTrue(form.DialogResult == DialogResult.Cancel);
    }
    

    所以我调用一个方法3次。每次通话后,我都想确保我们没有真正取消对话。然后在第三次调用时,应该取消对话框。

    这是aaa语法/样式的“合法”使用吗?

    2 回复  |  直到 11 年前
        1
  •  8
  •   shytikov Cascabel    11 年前

    a a a是使单元测试更具可读性的准则。在你提供的例子中,我认为你没有达到这个目标。

    我认为下面的测试使您正在测试的场景更具可读性。

    [TestMethod]
    public void CancelButtonSelected_ShouldSetDialogResultToNone_WhenFirstCancelButtonIsSelected()
    {
        // Arrange
        IAddAddressForm form = ArrangeFormForCancelButtonSelectedTests();
        AddAddressController controller = ArrangeControllerForCancelButtonSelectedTests();
    
        // Act
        controller.CancelButtonSelected();
    
        // Assert
        Assert.IsTrue(form.DialogResult == DialogResult.None);
    }
    
    [TestMethod]
    public void CancelButtonSelected_ShouldSetDialogResultToNone_WhenSecondCancelButtonIsSelected()
    {
        // Arrange
        IAddAddressForm form = ArrangeFormForCancelButtonSelectedTests();
        AddAddressController controller = ArrangeControllerForCancelButtonSelectedTests();
    
        // Act
        controller.CancelButtonSelected();
        controller.CancelButtonSelected();
    
        // Assert
        Assert.IsTrue(form.DialogResult == DialogResult.None);
    
    }
    
    [TestMethod]
    public void CancelButtonSelected_ShouldSetDialogResultToCancel_WhenThirdCancelButtonIsSelected()
    {
        // Arrange
        IAddAddressForm form = ArrangeFormForCancelButtonSelectedTests();
        AddAddressController controller = ArrangeControllerForCancelButtonSelectedTests();
    
        // Act
        controller.CancelButtonSelected();
        controller.CancelButtonSelected();
        controller.CancelButtonSelected();
    
        // Assert
        Assert.IsTrue(form.DialogResult == DialogResult.Cancel);
    }
    
        2
  •  1
  •   Péter Török    14 年前

    a a a只是一个使您的单元测试更具可读性的指南。如果你有充分的理由这样做的话,偏离是完全可以的。在某种程度上,您使用空白和注释来分隔代码中的不同阶段,这很好。在这种情况下,添加注释来解释您正在测试的故事可能也会有帮助。

    推荐文章