AutoFixture 3.21.0, AutoFixture.AutoMoq 3.21.0, NUnit 2.6.3 및 Moq 4.2.1409.1722를 사용합니다.인터페이스를 구현하는 추상 클래스를 사용하는 AutoConfiguredMoqCustomization
다음과 같은 인터페이스와 두 개의 추상 클래스 (이 인터페이스 중 하나는이 인터페이스를 구현) 및 두 개의 단위 테스트가 있습니다.
시험 합격. AutoConfiguredMoqCustomization이 있는지 특성에 따라 추상 클래스에 대해 서로 다른 행동이 인터페이스 여부를 정의하고있다 이유
public interface IMigration
{
IMigrationParameters MigrationParameters { get; set; }
}
public abstract class AbstractSutWithoutInterface
{
public IMigrationParameters MigrationParameters { get; set; }
}
public abstract class AbstractSutWithInterface : IMigration
{
public IMigrationParameters MigrationParameters { get; set; }
}
[TestFixture]
public class UnitTests
{
[Test]
public void TestAbstractSutWithoutInterface()
{
var fixture = new Fixture();
fixture.Customize(new AutoConfiguredMoqCustomization());
var mock = fixture.Create<AbstractSutWithoutInterface>();
Assert.IsNotNull(mock.MigrationParameters); // test passes
}
[Test]
public void TestAbstractSutWithInterface()
{
var fixture = new Fixture();
fixture.Customize(new AutoConfiguredMoqCustomization());
var mock = fixture.Create<AbstractSutWithInterface>();
Assert.IsNull(mock.MigrationParameters); // test passes
}
}
내 질문은? 첫 번째 테스트 속성에서 null이 아니라 두 번째 테스트에서 null 인 것으로 주장됩니다. 클래스가 추상 클래스가 아닌 경우 속성 주입은 두 클래스 모두에서 예상대로 작동합니다.
해당 클래스에'abstract' 키워드가 누락 되었습니까? –
@PatrickQuirk 누락 된 키워드를 소스 코드에서 찾아 주셔서 감사합니다. 나는 그것을 바로 잡았다. – sgnsajgon
두 가지 경우 모두 재현 할 수 없으며 나를 위해 null이 아닙니다. 최신 AutoFixture 버전을 사용하고 있습니까? –