Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用基于状态的验证还是基于行为的验证?_C#_Asp.net_Unit Testing_Mocking - Fatal编程技术网

C# 使用基于状态的验证还是基于行为的验证?

C# 使用基于状态的验证还是基于行为的验证?,c#,asp.net,unit-testing,mocking,C#,Asp.net,Unit Testing,Mocking,在我看来,我倾向于喜欢这种状态,原因是: 1.国库验证更简单,更容易理解。 2.状态库验证使用AAA模型。 3.行为库验证对重构的影响大于状态库。 你怎么认为?使用其中一个或两者?为什么?根据我的经验,基于状态的测试产生了更具可读性和可维护性的测试,并且更易于遵循。当然,基于行为的验证也有它的应用,但我想说的是,只有当基于状态的验证不可用时,才应该使用它 当然,可以用基于状态的验证替换任何基于行为的验证,但是您必须始终判断这样做是否值得您花费时间和金钱。考虑简单警报提升服务: public vo

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

根据我的经验,基于状态的测试产生了更具可读性和可维护性的测试,并且更易于遵循。当然,基于行为的验证也有它的应用,但我想说的是,只有当基于状态的验证不可用时,才应该使用它

当然,可以用基于状态的验证替换任何基于行为的验证,但是您必须始终判断这样做是否值得您花费时间和金钱。考虑简单警报提升服务:

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方法,是的,它也有可能在行为上,但似乎状态更清晰。