1

在我看来,我倾向于喜欢 state ,原因是: 1.state base 验证更简单,更容易理解。2.国基验证采用“AAA”模式。3.行为库验证对重构的影响大于状态库。你怎么看?使用其中之一或两者?为什么?

4

1 回答 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 回答