【发布时间】:2014-08-27 18:06:00
【问题描述】:
我正在使用 moq.dll 当我模拟一个类(所有 IRepository 接口)时,我使用此行代码
int state = 5;
var rep = new Mock<IRepository>();
rep.Setup(x => x.SaveState(state)).Returns(true);
IRepository repository = rep.Object;
但在这种情况下,我模拟了存储库类中的所有函数。 然后将类库中的所有方法替换为 Mock dll 的方法设置
我想使用类库中定义的所有方法(真正的类)并只模拟一个函数(SaveState)
我该怎么做?有可能吗?
【问题讨论】:
-
你知道你可以多次调用 rep.Setup 吗?
-
SaveState 是
virtual吗? -
SaveState 不是虚拟的。 Liath为什么要多次设置rep?我只想对这种方法使用设置。其他方法必须像现实世界一样工作
-
如果您不控制存储库对每个调用的响应,那么它就不是真正的单元测试。为了做你想做的事,你可以让你的代表成为真正的
IRepository的代理,并模拟所有方法以将他们的请求传递给真正的IRepository。对我来说,这似乎是一件非常有代码味道的事情。 -
Mock.CallBase属性控制这一点。但是,必须这样做通常是代码异味