【发布时间】:2017-11-26 07:58:45
【问题描述】:
使用 AutoFixture 3.50 和 xUnit.NET,Fixture.Create() 创建具体对象的方式与 AutoData Theory 测试创建具体对象的方式似乎有所不同。
简单示例:
public class Foo
{
private string prop;
public string Prop
{
get
{
if (prop == null) { prop = "Prop"; } // Breakpoint 'A'
return prop;
}
}
}
使用Fixture进行测试:
[Fact]
public void FixtureTest()
{
var fixture = new Fixture();
var result = fixture.Create<Foo>(); // Breakpoint 'B1'
}
使用AutoDataAttribute进行测试:
[Theory, AutoData]
public void AutoDataTest(Foo sut)
{
var bar = 1; // Essential no-op, Breakpoint 'B2'
}
在前一个测试中,断点“B1”被命中,而断点“A”从未被命中。在后一个测试中,断点“A”在断点“B2”被命中之前被命中。当我“懒惰地”初始化属性与上面的属性没有什么不同时,这是有问题的 - 因为属性的支持字段在测试运行之前被初始化,我无法测试初始化逻辑。
有没有办法自定义AutoDataAttribute 以便我可以绕过这种行为?或者,也许这是一个错误?
【问题讨论】:
标签: c# unit-testing xunit.net autofixture