作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当使用类不变量时,代码契约似乎到处都在注入(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/
我是一名优秀的程序员,十分优秀!