gpt4 book ai didi

c# - 我可以对用 Moles 创建的痣类型设定期望值吗?

转载 作者:太空狗 更新时间:2023-10-30 01:25:54 26 4
gpt4 key购买 nike

我不仅需要交换实现,还需要添加必要的检查以确保以正确的顺序调用某些方法。我可以想象像 Mole + Mock 这样的东西会给我这个选项。有谁知道 Moles 有没有这个功能?

这段代码应该有用:

// Verify if Dispose was called
MDisposableObject.Constructor = delegate(DisposableObject instance)
{
MDisposableObject mole = new MDisposableObject(instance);
...
// This doesn't work
//objectContext.Expects(i => i.Dispose()).ToBeCalledOneTime();
};

最佳答案

Moles 旨在为所有内容提供 stub (并且不是模拟),即使是静态或密封方法。在 Moles 手册中写道,它们不像其他模拟框架那样瞄准模拟方面:它们提供隔离,而不是模拟。如果你想检查 Moles 上的调用,你必须按照自己的方式进行。例如:

    bool called = false;
MDisposableObject.Constructor = (@this) =>
{
var mole = new MDisposableObject(@this)
{
Dispose = () =>
{
Assert.IsFalse(called);
called=true;
//if you want to call the original implementation:
MolesContext.ExecuteWithoutMoles(() => (@this).Dispose());
//or do something else, even nothing
}

};
};

只有 Typemock Isolator (功能强大但价格昂贵)和 JustMock Telerik 的(新并发,也不是免费的)为所有内容启用模拟功能。
如果您有一些接口(interface)、委托(delegate)和虚拟方法,请使用免费的模拟框架,如 Moq 或 RhinoMocks。

关于我的示例的警告:直到现在我还没有找到如何调用原始构造函数,我的意思是类似

var mole = new SDisposable();
(@this) = mole;
new MDisposable(mole) {...};

实际上,根据我在 msdn 上阅读的内容,这是不可能的......我希望后续版本能够实现这一点。

关于c# - 我可以对用 Moles 创建的痣类型设定期望值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045769/

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