使用状态库验证或行为基础验证?

时间:2013-05-09 07:39:02

标签: c# asp.net unit-testing mocking

在我的观点中,我倾向于喜欢这个州,原因是: 1.state base验证更简单,易于理解。 2.状态库验证使用“AAA”模型。 3.行为基础验证将影响重构而不是状态库。 你怎么看?使用其中一个或两个?为什么呢?

1 个答案:

答案 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 ,但它提供完全相同的目的