gpt4 book ai didi

c# - 我是否只需要在 Mock 对象上显式设置预期的返回值?

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

我的观察是否正确:

public intercafe IMyInterface { bool IsOK {get;set;} }

// If I use stub this always return true:
var stub = MockRepository.GenerateStub<IMyInterface>();
stub.IsOK = true;

// But if I use MOCK this always return false -NOT True
var mock= MockRepository.GenerateMock<IMyInterface>();
mock.IsOK = true;

如果我是对的;原因是什么?

最佳答案

简短的回答是,您可以设置 mock.IsOK 以通过对其设置期望并提供返回值来返回 true:

var mock= MockRepository.GenerateMock<IMyInterface>();
mock.Expect(x => x.IsOK).Return(true);

当然,要理解为什么,理解 mock 和 stub 之间的区别会有所帮助。马丁福勒在 this article 中做得更好比我能做到的。

基本上, stub 旨在用于提供虚拟值,从这个意义上说,Rhino.Mocks 允许您非常轻松地安排您希望这些虚拟值成为什么:

stub.IsOK = true;

另一方面,模拟旨在通过允许您对方法设置期望来帮助您测试行为。在这种情况下,Rhino.Mocks 允许您使用以下语法安排您的期望:

mock.Expect(x => x.IsOK).Return(true);

因为 Mock 和 Stub 服务于两个不同的目的,所以它们有完全不同的实现。

对于您的 Mock 示例:

var mock= MockRepository.GenerateMock<IMyInterface>();
mock.IsOK = true;

如果您的 mock 上的 IsOK setter 实现为空或完全忽略您的调用,我不会感到惊讶。

关于c# - 我是否只需要在 Mock 对象上显式设置预期的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713237/

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