在我看来,我倾向于喜欢 state ,原因是: 1.state base 验证更简单,更容易理解。2.国基验证采用“AAA”模式。3.行为库验证对重构的影响大于状态库。你怎么看?使用其中之一或两者?为什么?
问问题
179 次
1 回答
0
根据我的经验,基于状态的测试会产生更具可读性和可维护性的测试,并且更容易遵循。基于行为的验证当然有它的应用,但我想说你应该只在基于状态的验证不可用时才使用它。
当然,可以将任何基于行为的验证替换为基于状态的验证,但您始终必须判断这样做是否值得您花费时间和金钱。考虑简单的警报提升服务:
public void RaiseAlert(string message)
{
var alert = builder.CreateAlert();
alert.IsSystemWide = true;
alert.Content = CreateAlertContent(message);
var receivers = GetAlertReceivers(alert);
smsService.SendSmsAsync(alert.Content, receivers);
emailService.SendEmailAsync(alert.Content, receivers);
}
很容易猜到RaiseAlert
方法的单元测试之一必须验证是否发送了短信。您将如何使用状态验证来做到这一点?这里没有可观察到的状态变化。您必须滚动自己的模拟并设置一些布尔字段标记该方法被调用。或者使用模拟框架并进行基于行为的验证。
尽可能使用基于状态的验证,因为在大多数情况下更容易遵循。对于更复杂的少数群体,这可能是一个基于行为的验证的好方法。
另一方面,行为验证也使用AAA方法。只是最后一个 A ( assert ) 被替换为verify,但它的用途完全相同。
于 2013-05-09T09:23:20.763 回答