无法分配模拟对象的属性

时间:2014-04-04 16:54:39

标签: c# unit-testing rhino-mocks

我正在尝试设置模拟对象的公共属性,但测试无法运行。 View是Presenter的公共财产。

    [TestMethod]
    public void CustomerSearchPresenter_OnSearch_ValidateFromCustomerId_ExpectFalseWithInvalidNumber()
    {
        var customerSearchPresenter = new CustomerSearchPresenter();
        customerSearchPresenter.View = MockRepository.GenerateMock<ICustomerSearchView>();
        customerSearchPresenter.View.FromCustomerId = "test"; --> it is not working

        //Act
        customerSearchPresenter.OnSearch();

        //Assert
        Assert.IsFalse(customerSearchPresenter.View.IsValidFromCustomerId);
    }

1 个答案:

答案 0 :(得分:1)

我认为你不能直接设置模拟视图的属性。请记住,大多数模拟框架都会为您需要的 ICustomerSearchView 生成动态代理。

这意味着所有字段,属性,方法设置等都需要通过模拟框架,以便它可以在内部为您安排代理。最后,模拟框架公开的对象的行为与您设置它的方式相同。

因此,在这种情况下,您希望设置视图的属性,其值应使人们在访问该属性时,需要返回特定值。

通常,模拟框架的属性设置代码如下:

// create the mock for the view.
var viewMock = new Mock<ICustomerSearchView>();

// setup the property value
viewMock.SetupGet(v => v.FromCustomerId).Returns("test");

customerSearchPresenter.View = viewMock.Object; // the actual View.

尝试使用相同的代码..