AutoFixture 3.50 및 xUnit.NET을 사용하면 Fixture.Create()
이 콘크리트 개체를 만드는 방식과 AutoData Theory가 콘크리트 개체를 만드는 방식간에 차이가있는 것으로 보입니다.AutoDataAttribute의 구체적인 개체 생성 논리가 모든 속성 가져 오기 도구를 한 번만 호출합니다
간단한 예 :
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
을 사용자 정의하는 방법이 있습니까? 아니면 아마도 이것은 버그일까요?
자세한 답변을 보내 주셔서 감사합니다. – MrPiao