Unit testing 在AAA单元测试语法中混合使用Assert和Act

Unit testing 在AAA单元测试语法中混合使用Assert和Act,unit-testing,arrange-act-assert,Unit Testing,Arrange Act Assert,混合断言和动作步骤可以吗?AAA更多的是一个指导方针而不是一个规则吗?还是我遗漏了什么 这是我的测试: [TestMethod] public void CancelButtonSelected\u dontcanceltwicethenccel\u DialogCloses() { //安排 IADDADDRESFORM form=替换.For(); //指示何时调用Show CancelMessage //应返回取消两次(表示我们要取消取消) //那么它应该会返回ok form.ShowCa

混合断言和动作步骤可以吗?AAA更多的是一个指导方针而不是一个规则吗?还是我遗漏了什么

这是我的测试:

[TestMethod]
public void CancelButtonSelected\u dontcanceltwicethenccel\u DialogCloses()
{
//安排
IADDADDRESFORM form=替换.For();
//指示何时调用Show CancelMessage
//应返回取消两次(表示我们要取消取消)
//那么它应该会返回ok
form.ShowCancelMessage()返回(DialogResult.Cancel,
DialogResult.Cancel,DialogResult.OK);
AddAddressController=新的AddAddressController(表格);
AddressItem=TestHelper.CreateAddressBob();
//表演
输入地址信息(表格、控制器、项目);
controller.CancelButtonSelected();
Assert.IsTrue(form.DialogResult==DialogResult.None);
controller.CancelButtonSelected();
Assert.IsTrue(form.DialogResult==DialogResult.None);
controller.CancelButtonSelected();
//断言
Assert.IsTrue(form.DialogResult==DialogResult.Cancel);
}
所以我调用了一个方法3次。每次通话后,我都想确保我们没有真正取消对话。然后在第三次调用时,该对话框应被取消


AAA语法/样式的这种“合法”使用吗?

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

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

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

[TestMethod]
public void CancelButtonSelected_应在选择RSTCancelButtonSelected()时设置DialogResultOne_
{
//安排
IAddAddressForm form=ArrangeFormForCancelButtonSelectedTests();
AddAddressController=ArrangeControllerForCancelButtonSelectedTests();
//表演
controller.CancelButtonSelected();
//断言
Assert.IsTrue(form.DialogResult==DialogResult.None);
}
[测试方法]
当第二个CancelButtonIsSelected()时,public void CancelButtonSelected_应设置对话框Resulttone_
{
//安排
IAddAddressForm form=ArrangeFormForCancelButtonSelectedTests();
AddAddressController=ArrangeControllerForCancelButtonSelectedTests();
//表演
controller.CancelButtonSelected();
controller.CancelButtonSelected();
//断言
Assert.IsTrue(form.DialogResult==DialogResult.None);
}
[测试方法]
当第三个CancelButtonIsSelected()时,public void CancelButtonSelected\u应设置对话框ResultToCancel\u
{
//安排
IAddAddressForm form=ArrangeFormForCancelButtonSelectedTests();
AddAddressController=ArrangeControllerForCancelButtonSelectedTests();
//表演
controller.CancelButtonSelected();
controller.CancelButtonSelected();
controller.CancelButtonSelected();
//断言
Assert.IsTrue(form.DialogResult==DialogResult.Cancel);
}

+1间接指出测试失败的原因只有一个。