所以我试图模拟一个接口,该接口包含我的单元测试最初必须设置的属性,然后被测试对象改变,然后我的断言查看结果。
测试中的代码如下所示:
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
。我只看到了如何使用mock类中的变量执行此操作的文档,以及如何使用方法执行此操作,但不使用属性的setter。
我觉得我应该像这样添加一行到BazFactory.Create()
,但以下代码不起作用。
baz.ArrangeSet(x => this.IntList = x.IntList);
如何在动作的上下文中表达“传递给baz.IntList
”的值?
如果它有所不同,我使用的是JustMock的Lite版本。