gpt4 book ai didi

c# - 最小起订量和代码契约(Contract)

转载 作者:太空狗 更新时间:2023-10-29 23:18:07 25 4
gpt4 key购买 nike

当使用类不变量时,代码契约似乎到处都在注入(inject)代码。像这样的东西

[ContractClassFor(typeof(IX))]
interface IXContract
{
[ClassInvariant]
void Invariant() { ... }
}

[ContractClass(typeof(IXContract))]
interface IX { event EventHandler b; }

var a = new Mock<IX>();

a.Raise(x => x.b += null);

失败并显示错误消息

Could not locate event for attach or detach method Void $InvariantMethod$().

有人知道解决方案吗?

最佳答案

此单元测试在运行时“通过”且未生成异常:

[ContractClassFor(typeof(IX))]
class IXContract
{
[ContractInvariantMethod]
void Invariant() { }
}

[ContractClass(typeof(IXContract))]
public interface IX { event EventHandler b; }

/// <summary>
/// Summary description for UnitTest1
/// </summary>
[TestClass]
public class UnitTest1
{
public void MyTest()
{
var a = new Mock<IX>();

a.Raise(x => x.b += null);
}
}

我不完全确定发生了什么以及您是如何编译(或转录)上述内容的,但我认为您不能使用“ContractClassFor”属性来装饰接口(interface),而且您当然不能使用在接口(interface)中实现“{ ... }”。您还需要公开您的接口(interface) IX 以模拟它(或者在您的属性中使用 InternalsVisibleTo() 城堡代理内部)。

希望这会有所帮助,但如果这不能引导您实现您想要做的事情,请随时使用新代码更新您的帖子。

关于c# - 最小起订量和代码契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6390348/

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