在我的观点中,我倾向于喜欢这个州,原因是: 1.state base验证更简单,易于理解。 2.状态库验证使用“AAA”模型。 3.行为基础验证将影响重构而不是状态库。 你怎么看?使用其中一个或两个?为什么呢?
答案 0 :(得分: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
方法的单元测试之一必须验证是否已发送短信。你会如何使用状态验证?这里有没有可观察到的状态变化。你必须滚动你自己的模拟并设置一些bool字段标记该方法被调用。或者使用模拟框架并进行基于行为的验证。
尽可能使用基于状态的验证,因为在大多数情况下更容易遵循。对于更复杂的少数群体,它可能是对基于行为的验证的良好呼吁。
另外,行为验证还使用 AAA 方法。只是最后一个 A (断言)被替换为 verify ,但它提供完全相同的目的。