gpt4 book ai didi

unit-testing - .NET 4.0 代码契约 - 它们将如何影响单元测试?

转载 作者:行者123 更新时间:2023-12-03 07:38:24 24 4
gpt4 key购买 nike

例如这个article介绍他们。

有什么好处?

静态分析看起来很酷,但同时它会阻止在单元测试中将 null 作为参数传递的能力。 (如果您按照文章中的示例进行操作)

在单元测试的主题上 - 考虑到现在的情况,如果您已经练习了自动化测试,那么代码契约肯定没有意义?

更新

玩过代码合约后我有点失望。例如,根据接受的答案中的代码:

public double CalculateTotal(Order order)
{
Contract.Requires(order != null);
Contract.Ensures(Contract.Result<double>() >= 0);
return 2.0;
}

对于单元测试,你仍然必须编写测试来确保不能传递null,并且如果契约是业务逻辑,则结果大于或等于0>。换句话说,如果我要删除第一个契约(Contract),则任何测试都不会中断,除非我专门对此功能进行了测试。然而,这是基于不使用 Visual Studio 更好(终极等)版本中内置的静态分析。

本质上,它们都归结为编写传统 if 语句的另一种方式。我实际使用的经验TDD, with Code Contracts展示了原因以及我是如何进行的。

最佳答案

我不认为单元测试和合约相互干扰太多,如果有什么的话合约应该有助于单元测试,因为它消除了为无效参数添加繁琐的重复测试的需要。契约指定了您可以从函数中期望的最小值,而单元测试则尝试验证特定输入集的实际行为。考虑这个人为的例子:


public class Order
{
public IEnumerable Items { get; }
}

public class OrderCalculator
{
public double CalculateTotal(Order order)
{
Contract.Requires(order != null);
Contract.Ensures(Contract.Result<double>() >= 0);

return 2.0;
}
}

显然,代码满足契约(Contract),但您仍然需要单元测试来验证它的实际行为是否符合您的预期。

关于unit-testing - .NET 4.0 代码契约 - 它们将如何影响单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com