gpt4 book ai didi

c# - 有什么方法可以测试使用代码契约(Contract)设置的契约(Contract)吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:42 25 4
gpt4 key购买 nike

我想编写单元测试来验证我的方法不接受无效参数。使用 Code Contract 的 Contract.Requires 调用检查参数的有效性。我为什么要测试合约?我认为我的测试是一种方法规范(实际上是从 TDD 中提取的想法),因此通过测试该方法对某些参数失败,我指定不应使用此类参数。

问题是,自从我开始使用代码契约后,我无法测试方法契约,因为我无法访问 Contract.Requires 抛出的异常。我可以捕获通用 Exception 但这并不好......是否有推荐/支持的方式如何使用代码契约(Contract)测试契约(Contract)集?

在我看来,Code Contracts 并不真正支持单元测试...


编辑:我的测试示例(我被迫捕获一般异常)

[ExpectedException(typeof(Exception), AllowDerivedTypes = true)]
public void Compute_Throws_ForNullArgument()
{
new ComputingService().Compute(null);
}

最佳答案

您可以挂接到 Contract.ContractFailed 事件。

http://msdn.microsoft.com/en-us/library/system.diagnostics.contracts.contract.contractfailed(v=vs.110).aspx

这将在抛出异常之前引发。您可以将其与捕获 Exception 结合起来,以非常确定它代表了契约(Contract)失败

public void VerifyContract(Action action) { 
bool failed = false;
bool thrown = false;
EventHandler e = (sender, e) => { failed = true; }
Contract.ContractFailed += e;
try {
action();
} catch (Execption) {
Assert.True(failed);
thrown = true;
} finally {
Contract.ContractFailed -= e;
}
Assert.True(thrown);
}

关于c# - 有什么方法可以测试使用代码契约(Contract)设置的契约(Contract)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996781/

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