Я использую 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 имеет различное поведение для абстрактных классов, в зависимости от того имущества определяется интерфейс или нет? В первом тестовом свойстве утверждается, что он не является нулевым, а во втором тесте равен нулю. Если классы не абстрактны, вложение свойств работает как ожидалось для обоих классов.
Эти классы не имеют ключевого слова 'abstract'? –
@PatrickQuirk Спасибо за указание недостающего ключевого слова в исходном коде. Я исправил это. – sgnsajgon
Я не могу воспроизвести, в обоих случаях они для меня не являются нулевыми. Я использую последнюю версию AutoFixture, которую вы используете? –