Может ли проект модульного теста ссылаться на другую внешнюю DLL, чем проект prod?

У меня есть эти проекты / DLL:

  • mylib проект-проект с логикой я тестирую
  • mylib_test проект-тестирование проекта NUnit test mylib
  • otherlib.dll — третья сторона DLL, которая mylibиспользует
  • otherlib_mock.dll — макетotherlib.dll, который я хочу использовать при тестировании. Он содержит все типы, которые находятся в otherlib.dllс теми же интерфейсами, за исключением того, что он всегда возвращает фиктивные данные вместо того, чтобы фактически делать работу, которая otherlib.dllделает.

Я хочу, что mylibбудет использоваться otherlib.dllв обычной работе, но когда модульные тесты запускаются от mylib_testotherlib_mock.dllбудет использоватьсяmylib.

В настоящее время все типы находятся в том же пространстве otherlib.dllимен, что и so if I modify mylibto reference otherlib_mock.dllinstead of otherlib.dll— everything works with the mock types. Может как-то сделать это автоматически для тестирования, а не для обычной работы?

Вариант 2: у меня есть код otherlib_mock.dll. Я мог бы изменить его пространство имен, чтобы отличаться, otherlib.dllа затем я мог бы ссылаться на них обоих mylib. Теперь я переключаюсь между издевательским и не-издевательским поведением, переключаясь между пространствами имен. Можно ли поместить usingстроки #ifи #elseиспользовать otherlib.dllпространство имен в обычной работе и otherlib_mock.dllпространство имен при выполнении тестов?

1 ответ

  1. Это хороший кандидат для решения путем инъекции зависимостей. Следует ссылаться на обе библиотеки DLL в разных областях имен, а затем в тестовой библиотеке внедрить тестовую библиотеку, а в производственном коде внедрить реальную.