如何使用 Moles 为 C# 中的方法的多次调用返回不同的值?

发布于 2024-12-12 14:39:16 字数 610 浏览 0 评论 0原文

我一直在尝试为此找到解决方案,但要么我一直在寻找错误的搜索词,要么根本就没有我的问题的答案。

问题: 我有一个方法,我想为其编写单元测试。在这个方法中,有一个我无法真正解决的外部依赖项,因此我必须使用 Moles 来创建我的单元测试。

这种外部依赖关系由一个实例上的方法组成,该方法被调用多次(两次),第二次我想用 Moles 返回不同的值。

...
bool myVar = SomeInstance.SomeMethod(); // Here I'd like to return true
if( myVar )
...
...
bool myOtherVar = SomeInstance.SomeMethod(); // Here I'd like to return false
...

现在通常我将其设置为

MSomeInstance.SomeMethod.AllInstances.SomeMethod = @this => true;

但是我如何才能对两个调用有不同的行为?当我在上面一行后面写另一行并返回“false”时,这会“覆盖”第一行,因此我总是会得到 false 的结果。

有什么想法吗?

I've been trying to find a solution for this, but either I've been looking with the wrong search terms or there simply isn't an answer for my question yet.

Problem:
I've got a method that I'd like to write a unit test for. Within this method there is an external dependency that I can't really resolve, so I'll have to use Moles to create my unit test.

This external dependency consists of a method on an instance that is called multiple (two) times, and the second time I'd like to return a different value with Moles.

...
bool myVar = SomeInstance.SomeMethod(); // Here I'd like to return true
if( myVar )
...
...
bool myOtherVar = SomeInstance.SomeMethod(); // Here I'd like to return false
...

Now usually I set it up like

MSomeInstance.SomeMethod.AllInstances.SomeMethod = @this => true;

But how can I have different behaviours for both calls? When I write another line following the one above with "false" being returned, this "overwrites" the first one, so I'll always get false as a result.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陌上青苔 2024-12-19 14:39:16

这有点难看,但有可能:

var toggle = false;
MSomeInstance.SomeMethod.AllInstances.SomeMethod =
    @this => { toggle = !toggle; return toggle; };

第一个调用将返回 true,第二个调用将返回 false。

It's a bit ugly, but possible:

var toggle = false;
MSomeInstance.SomeMethod.AllInstances.SomeMethod =
    @this => { toggle = !toggle; return toggle; };

The first call will return true, the second false.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文