2014-10-23 5 views
5

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 인 것으로 주장됩니다. 클래스가 추상 클래스가 아닌 경우 속성 주입은 두 클래스 모두에서 예상대로 작동합니다.

+1

해당 클래스에'abstract' 키워드가 누락 되었습니까? –

+0

@PatrickQuirk 누락 된 키워드를 소스 코드에서 찾아 주셔서 감사합니다. 나는 그것을 바로 잡았다. – sgnsajgon

+0

두 가지 경우 모두 재현 할 수 없으며 나를 위해 null이 아닙니다. 최신 AutoFixture 버전을 사용하고 있습니까? –

답변

5

업데이트 2015년 4월 15일은

이 버그는 AutoFixture.AutoMoq 3.24.2에서 수정되었습니다. 자세한 내용은 here을 참조하십시오.

이 지금 AutoFixture의 GitHub의, Issue 324에 추적되고

업데이트 2014년 11월 3일.

또한 Moq의 마지막 작업 버전은 4.2.1402.2112이고 4.0 대신 다운 그레이드 할 수 있습니다.


Moq (4.2.1409.1722)의 최신 버전에서만이를 재현 할 수 있습니다.

내가 지금 이걸보고 있는데, seeeeems 버그가 Moq의 최신 버전에서 소개 된 것 같지만, 의도적으로 설계되었을 수 있지만, 확실하지 않습니다.

그동안 버전 4.0.10827을 사용하십시오. 도구로 이동 다운 그레이드하려면 -> NuGet 패킷 관리자 -> 패키지 관리자 콘솔 및 유형 :

Uninstall-Package Moq -Force 
Install-Package Moq -Version 4.0.10827 

내 소견이 대답을 업데이트 할 수 있습니다.

관련 문제