C# 使用基于状态的验证还是基于行为的验证?
在我看来,我倾向于喜欢这种状态,原因是: 1.国库验证更简单,更容易理解。 2.状态库验证使用AAA模型。 3.行为库验证对重构的影响大于状态库。C# 使用基于状态的验证还是基于行为的验证?,c#,asp.net,unit-testing,mocking,C#,Asp.net,Unit Testing,Mocking,在我看来,我倾向于喜欢这种状态,原因是: 1.国库验证更简单,更容易理解。 2.状态库验证使用AAA模型。 3.行为库验证对重构的影响大于状态库。 你怎么认为?使用其中一个或两者?为什么?根据我的经验,基于状态的测试产生了更具可读性和可维护性的测试,并且更易于遵循。当然,基于行为的验证也有它的应用,但我想说的是,只有当基于状态的验证不可用时,才应该使用它 当然,可以用基于状态的验证替换任何基于行为的验证,但是您必须始终判断这样做是否值得您花费时间和金钱。考虑简单警报提升服务: public vo
你怎么认为?使用其中一个或两者?为什么?根据我的经验,基于状态的测试产生了更具可读性和可维护性的测试,并且更易于遵循。当然,基于行为的验证也有它的应用,但我想说的是,只有当基于状态的验证不可用时,才应该使用它 当然,可以用基于状态的验证替换任何基于行为的验证,但是您必须始终判断这样做是否值得您花费时间和金钱。考虑简单警报提升服务:
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方法的单元测试之一必须验证sms是否已发送。您将如何使用状态验证来实现这一点?这里没有可见的状态变化。您必须滚动自己的mock并设置一些bool字段标记该方法被调用。或者使用mocking框架进行基于行为的验证
尽可能使用基于状态的验证,因为在大多数情况下更容易遵循。对于更复杂的少数群体,这可能是一个基于行为的验证的好呼吁
另一方面,行为验证也使用AAA方法。只是最后一个断言被替换为verify,但它的用途完全相同。太宽泛了,请详细说明一些具体的应用程序示例。就目前的情况而言,这两者都可能是真的,也可能是假的。不可能有正确的答案。这似乎是“在这里不要问什么样的问题”的一个很好的候选者。这是一本闲聊、开放式的书,可能需要一本书才能回答——或者至少需要一两章。很好的观点!我同意你的看法。对于AAA方法,是的,它也有可能在行为上,但似乎状态更清晰。