2014-10-23 2 views
5

Я использую AutoFixture 3.21.0, AutoFixture.AutoMoq 3.21.0, NUnit 2.6.3 и Moq 4.2.1409.1722.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 
     } 
    } 

Мой вопрос, почему AutoConfiguredMoqCustomization имеет различное поведение для абстрактных классов, в зависимости от того имущества определяется интерфейс или нет? В первом тестовом свойстве утверждается, что он не является нулевым, а во втором тесте равен нулю. Если классы не абстрактны, вложение свойств работает как ожидалось для обоих классов.

+1

Эти классы не имеют ключевого слова 'abstract'? –

+0

@PatrickQuirk Спасибо за указание недостающего ключевого слова в исходном коде. Я исправил это. – sgnsajgon

+0

Я не могу воспроизвести, в обоих случаях они для меня не являются нулевыми. Я использую последнюю версию AutoFixture, которую вы используете? –

ответ

5

Update 2015/04/15

Эта ошибка была исправлена ​​в AutoFixture.AutoMoq 3.24.2. См. Подробности here.

Update 2014/11/03

Это теперь отслеживаются на GitHub AutoFixture в, Issue 324.

Кроме того, последняя рабочая версия Moq - 4.2.1402.2112, вы можете перейти на нее вместо 4.0.


Я могу воспроизвести это только с последней версией Moq (4.2.1409.1722).

Я изучаю это прямо сейчас, и это seeeeems как ошибка была введена в последней версии Moq, но это может быть по дизайну, я еще не уверен.

А пока используйте версию 4.0.10827. Чтобы понизить, перейдите в меню Сервис -> NuGet Packet Manager -> Package Manager Console и введите:

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

Я буду обновлять этот ответ с моими выводами.

Смежные вопросы