【发布时间】:2010-02-02 21:35:23
【问题描述】:
是否可以模拟存根/模拟的对象成员调用而不必将其定义为存根,并将返回值设置为所有单独的详细行?
例子:
[TestMethod]
public void AssignedPermissions_AssociateExists_ReturnsEdit_Rhino()
{
//Arrange
var fakeConfiguration = MockRepository.GenerateStub<IDomainControllerConfiguration>();
var fakeAssociateRepository = MockRepository.GenerateStub<IAssociateRepository>();
fakeConfiguration.Stub(x => x.AssociateRepository).Return(fakeAssociateRepository);
fakeAssociateRepository.Stub(x=>x.GetAssociatesByRole(null,false,null)).IgnoreArguments()
.Return(new IAssociate[]{MockRepository.GenerateStub<IAssociate>()});
var domain = new DomainController(fakeConfiguration);
const AssignedPermission expected = AssignedPermission.Edit;
//Act
AssignedPermission actual = domain.AssignedPermissions();
//Assert
Assert.AreEqual(expected, actual);
}
是否所有这些临时变量都只需要存根嵌套的方法调用?
【问题讨论】:
-
你遇到了违反得墨忒耳法则的后果之一:clintshank.javadevelopersjournal.com/long_unit_test_setup.htm
-
@wcoenen 好吧.. 配置对象不应该真正直接处理调用者内部我认为的内容?因此,至少这一层嵌套似乎很重要或有价值。因为这主要是一个裸露的 DTO
-
您不一定要在配置对象上添加传递方法。为什么不为存储库添加一个构造函数参数?
new DomainController(fakeConfiguration, fakeRepository);