Я занимаюсь обновлением проекта, над которым работал несколько лет назад. В процессе я обновил до последней версии 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.
Спасибо, что поделились сценарием!
Как обычно, могу ли я попросить вас предоставить минимальный, полный и проверяемый пример , чтобы я мог скопировать и вставить его, чтобы глубоко исследовать причину? Дьявол часто кроется в некоторых особенностях, поэтому, даже если вы хорошо описали сценарий, все равно может случиться так, что некоторые не упомянутые детали будут иметь значение.
Заранее большое спасибо! :с облегчением:
Извините, мне следовало пойти и создать еще один (возможно, пару) проектов - я надеялся, что мой вопрос, возможно, вызвал что-то очевидное, прежде чем я ушел и сделал это, поскольку это потребовало бы преобразования моих методов оболочки в необработанный код AutoFixture / FakeItEasy.
Хорошая новость в том, что я, кажется, исправил это.
Класс AoiFormulaTokenProcessorContext
вызывающий проблему, - internal
(в другом проекте). Когда я изменил его на public
ошибка исчезнет.
У меня уже было [assembly: InternalsVisibleTo("...")]
в файле AssemblyInfo.cs, но я только что вспомнил, что мои старые проекты также включали [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
.
Я не помню, что делает последний, но теперь все ошибки исчезли.
Хорошие новости, проблема смягчена: Relaxed: Вот почему я попросил образец - всегда легче, когда другие факторы изолированы.
Я не помню, что делает последний, но теперь все ошибки исчезли.
Знаю: smile: Это связано с фейками и прокси Castle
, используемыми под капотом. Да, если класс внутренний, то он действительно должен помочь.
Я понимаю. Имея многолетний опыт, я должен знать лучше - я был в одной лодке и спрашивал то же самое. Спасибо за ответы.
Самый полезный комментарий
Я понимаю. Имея многолетний опыт, я должен знать лучше - я был в одной лодке и спрашивал то же самое. Спасибо за ответы.