Autofixture: Невозможно создать подделку

Созданный на 4 июн. 2018  ·  4Комментарии  ·  Источник: AutoFixture/AutoFixture

Я занимаюсь обновлением проекта, над которым работал несколько лет назад. В процессе я обновил до последней версии FakeItEasy и AutoFixture.

У меня 40 тестов, которые не проходят с ошибкой, похожей на:

AutoFixture не удалось создать экземпляр из
FakeItEasy.Fake 1 [System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]] потому что создание неожиданно завершилось ошибкой с исключением.

Где сообщает внутреннее исключение:
Failed to create fake of type System.Collections.Generic.IList 1 [AllOverIt.Evaluator.AoiFormulaTokenProcessorContext] `

Строка, в которой произошел сбой, эквивалентна этой:
Fixture.Create<Fake<IList<AoiFormulaTokenProcessorContext>>>();

В качестве теста я попробовал что-то попроще:
Fixture.Create<Fake<IList<int>>>();

Это не сработало, поэтому я посмотрел на конструктор AoiFormulaTokenProcessorContext . Это выглядит так:

public AoiFormulaTokenProcessorContext(Func<char, bool, bool> predicate, Func<char, bool, bool> processor)

После некоторого чтения на https://github.com/AutoFixture/AutoFixture/issues/984 я попытался добавить к этому 'GenerateDelegates':
Fixture.Customize(new AutoFakeItEasyCustomization {GenerateDelegates = true});

Но у меня все еще та же проблема.

Поскольку этот код работал, я могу только предположить, что где-то есть еще одно критическое изменение, на которое я еще не наткнулся. Надеюсь, что кто-то может подбросить мне пару предложений.

TIA.

question

Самый полезный комментарий

Я понимаю. Имея многолетний опыт, я должен знать лучше - я был в одной лодке и спрашивал то же самое. Спасибо за ответы.

Все 4 Комментарий

Спасибо, что поделились сценарием!

Как обычно, могу ли я попросить вас предоставить минимальный, полный и проверяемый пример , чтобы я мог скопировать и вставить его, чтобы глубоко исследовать причину? Дьявол часто кроется в некоторых особенностях, поэтому, даже если вы хорошо описали сценарий, все равно может случиться так, что некоторые не упомянутые детали будут иметь значение.

Заранее большое спасибо! :с облегчением:

Извините, мне следовало пойти и создать еще один (возможно, пару) проектов - я надеялся, что мой вопрос, возможно, вызвал что-то очевидное, прежде чем я ушел и сделал это, поскольку это потребовало бы преобразования моих методов оболочки в необработанный код AutoFixture / FakeItEasy.

Хорошая новость в том, что я, кажется, исправил это.

Класс AoiFormulaTokenProcessorContext вызывающий проблему, - internal (в другом проекте). Когда я изменил его на public ошибка исчезнет.

У меня уже было [assembly: InternalsVisibleTo("...")] в файле AssemblyInfo.cs, но я только что вспомнил, что мои старые проекты также включали [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] .

Я не помню, что делает последний, но теперь все ошибки исчезли.

Хорошие новости, проблема смягчена: Relaxed: Вот почему я попросил образец - всегда легче, когда другие факторы изолированы.

Я не помню, что делает последний, но теперь все ошибки исчезли.

Знаю: smile: Это связано с фейками и прокси Castle , используемыми под капотом. Да, если класс внутренний, то он действительно должен помочь.

Я понимаю. Имея многолетний опыт, я должен знать лучше - я был в одной лодке и спрашивал то же самое. Спасибо за ответы.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги