Модульное тестирование закрытых членов с использованием * _Accessor - PullRequest
1 голос
/ 03 апреля 2012

В настоящее время я работаю над решением C # в VS 2010.

Для написания достаточного количества модульных тестов для моих бизнес-процессов я использую подход Accessor для доступа и изменения внутренних компонентов моих бизнес-объектов.

Проблемы, которые возникли на моем сервере сборки TFS, теперь, когда я добавил Accessors к моей сборке objet в ряде других тестовых сборок, когда мой тестовый запуск не полностью прошел тест, некоторые из них терпят неудачу с предупреждением в виде :

... <Test failed message> ....
... Could not load file 'ObjectLibrary_Accessor, Version=0.0.0.0, 
        Culture=neutralm PublicKeyToken=ab391acd9394' or one of its dependencies.
...
...

Я полагаю, что проблема заключается в том, что при компиляции каждой тестовой сборки создается ObjectLibrary_Accessor.dll с другим строгим именем. Поэтому, когда некоторые из тестов скомпилированы, проверка строгого имени завершается с ошибкой, описанной выше, даже если DLL находится в ожидаемом месте.

Я вижу несколько вариантов, ни один из которых не является особенно привлекательным, к ним относятся:

  1. Не используется подход _Accessor.
  2. Установить разные XX_Accessor.dll для каждой тестовой сборки. Можно ли изменить имя созданной сборки, чтобы избежать конфликта?
  3. Измените мою сборку интеграции, чтобы использовать разные папки для каждого тестового проекта (как?)
  4. Другие варианты, о которых я не знаю?

Мне был бы интересен любой совет или опыт, которые были у людей по этому вопросу, решения и обходные пути (хотя у меня нет времени, чтобы изменить свой код, поэтому вариант 1 не одобряется).

1 Ответ

3 голосов
/ 10 апреля 2012

Подход Accessor, как вы видели, немного хрупок.

Вы можете сделать внутренние элементы видимыми для вашего тестового кода, используя атрибут сборки InternalsVisibleTo.

Если вы хотите использовать частные методы и используете .NET 4.0, попробуйте использовать что-то вроде Trespasser , чтобы упростить эту задачу.

Дополнительные варианты см. В ответах на этот вопрос: Как вы тестируете частные методы?

...