【发布时间】:2009-07-14 22:47:31
【问题描述】:
我有一个 PresenterFactory,它基于 Role 参数创建 Presenter 类。具体来说,Role 参数是我无法控制的外部类(IE 3rd 方。)
我的工厂看起来像这样:
public class PresenterFactory {
public Presenter CreatePresenter(Role role, ...) {
if (role.IsUserA("Manager")) {
return new ManagerPresenter(...)
}
if (role.IsUserA("Employee")) {
return new EmployeePresenter(...)
}
}
}
由于创建Role 对象会强制访问数据库,因此我一直纠结于如何为此编写单元测试。我以为我可以模拟这个对象。我的测试看起来像这样:
public void TestPresenterFactory()
{
var mockRole = new Mock<Role>();
mockRole .Setup(role=> role.IsUserA("Manager"))
.Returns(true)
.AtMostOnce();
PresenterFactory.CreatePresenter(mockRole.Object, ...);
mockUserInfo.VerifyAll();
}
但是我收到了ArguementException:
不可覆盖成员的无效设置:role=> role.IsUserA("Manager")
我不确定去哪里,当然可以使用一些路线修正。我做错了什么?
【问题讨论】:
标签: unit-testing mocking moq