1

所以我试图模拟一个接口,该接口包含我的单元测试最初必须设置的属性,然后由被测对象更改,然后我的断言查看结果。

被测代码如下所示:

public class Foo
{
    IEnumerable<int> IntList { get; set; }

    public void Bar(IBaz baz)
    {
        if (baz == null)
            throw new ApplicationException();

        if (baz.IntList == null)
            baz.IntList = new List<int>();

        this.IntList = baz.IntList;
    }
}

我在这样的工厂中嘲笑我的界面:

public class BazFactory
{
    public IEnumerable<int> IntList { get; set; }

    public IBaz Create()
    {
        IBaz baz = Mock.Create<IBaz>();
        baz.Arrange(x => x.IntList).Returns(this.IntList);
        return baz;
    }
}

我的单元测试像这样消耗它:

[Fact]
public void WithNullIntList_InitializesNew()
{
    //Arrange
    Foo foo = new Foo();
    BazFactory factory = new BazFactory();
    IBaz baz = factory.Create();

    //Act
    foo.Bar(baz);

    //Assert
    Assert.NotNull(foo.IntList);
}

显然,这是行不通的,因为虽然foo.Bar()尝试改变baz.IntList,但它仍然返回factory.IntList,它没有改变。

我需要的是能够进行安排baz.IntList,以便在设置时将传递给它的值转移factory.IntList。我只看到有关如何使用模拟类中的变量执行此操作以及如何使用方法而不是属性设置器执行此操作的文档。

我觉得我应该可以BazFactory.Create()像这样添加一行,但是下面的代码不起作用。

baz.ArrangeSet(x => this.IntList = x.IntList);

如何baz.IntList在动作的上下文中表达“传递给的值”?

如果它有所作为,我使用的是精简版的 JustMock。

4

0 回答 0