我有一个名为Validate的方法的类,我想使用Rhino Mocks进行测试。 Validate方法调用静态类,而静态类又访问SQL数据库。
我想告诉rhino mocks在执行测试时忽略对静态类的调用。 在调试下面的代码时,仍会调用静态类,并且在我想要它完成所有操作时尝试访问数据库时返回“错误消息文本”。
var mock = MockRepository.GenerateMock<DataUpdateTaskExecutor>();
string resourceName;
Expect.Call(SqlResourceHelper.GetString(resourceName)).IgnoreArguments().Return("error messaage text");
IList<string> errors;
Assert.AreEqual(false,mock.Validate(out errors));
答案 0 :(得分:2)
Rhino.Mocks(以及大多数其他免费模拟框架,如moq)无法模拟非虚拟成员。正如@Joe Tuskan所说,您应该将功能包装在接口中并在构造函数中注入接口,或者使其成为可以模拟的非静态方法。
如果你有钱花钱,有商业模拟工具可以让非虚拟成员被嘲笑。我没有任何经验,所以我不会提到任何名字。
答案 1 :(得分:0)
“如果你有钱花钱,那么有商业模拟工具可以让非虚拟成员被嘲笑。”,Telerik只是模拟是一个很棒的模拟框架。值得付钱!