Я пишу тест, используя xUnit 2
и AutoFixture
для проекта .Net Core 2.2. Мне требуется три Мока в тесте, чтобы удовлетворить тестируемой системе, и ранее AutoFixture не имела проблем с этим. Однако теперь, когда я добавляю в тестовую сигнатуру более двух макетов, я получаю исключение.
[Theory]
[AutoData]
public void ContrivedTest(
Mock<IDependencyOne> mockDependencyOne,
Mock<IDependencyTwo> mockDependencyTwo)
{
Assert.True(true);
}
Будет работать как положено, но:
[Theory]
[AutoData]
public void ContrivedTest(
Mock<IDependencyOne> mockDependencyOne,
Mock<IDependencyTwo> mockDependencyTwo,
Mock<IDependencyThree> mockDependencyThree)
{
Assert.True(true);
}
Выдает следующее исключение:
---- System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова.
-------- System.ArgumentOutOfRangeException: указанный аргумент находится вне диапазона допустимых значений. Имя параметра: значение
Этот вопрос (почти дословно) недавно задавался на AutoFixture Github , но предоставлен ответ:
AutoData и InlineAutoData не узнают о Moq, когда вы просто устанавливаете пакет AutoFixture.AutoMoq. Вместо этого вы должны создать свои собственные атрибуты данных, полученные из значений по умолчанию, настроить приспособление с поддержкой Moq и использовать их
Не имеет смысла для меня. Почему должны работать две насмешки, а не три? Как помогает создание моего собственного атрибута данных и как именно я должен настроить прибор с поддержкой Moq?
Стоит отметить, что я не использую AutoMoq
, как мне никогда не было нужно в прошлом. Я мог бы так же легко примерить макеты самостоятельно в тесте, и я собираюсь сделать это так, как мне нужно, чтобы это работало, но мне любопытно, почему что-то, что раньше работало просто отлично, перестало работать: я все время использовал это неправильно и это просто сработало по счастливой случайности?