Как получить доступ к классам в другой сборке для целей модульного тестирования?

StackOverflow https://stackoverflow.com/questions/1211707

  •  06-07-2019
  •  | 
  •  

Вопрос

Я перехожу к модульному тестированию способом Visual-Studio 2008, и мне интересно, какой наилучший способ выполнить перекрестную сборку class доступ для целей тестирования.

По сути, у меня есть два проекта в одном решении:

  1. MyProject (C #)
  2. MyProjectTests (тестовый проект на C #)

Все в MyProject в настоящее время имеет доступность по умолчанию, что, если я правильно помню, означает, что все эффективно internal.В основном я собираюсь протестироваться в class уровне, но есть несколько delegates вовлечен.

Вероятно, когда-нибудь в будущем появится внешний API, но я прошел около 20% пути к завершению функции (по крайней мере, на бумаге), и я начинаю опасаться накладывать больше кода поверх этого непроверенного ядра.Соответственно, я хотел бы провести некоторое тестирование сейчас, прежде чем приложение станет достаточно полным для традиционного (читать:плохое и / или ленивое) функциональное тестирование и определенно до запуска версии n + 1 внешнего API.

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

Это было полезно?

Другие советы

Вам нужно добавить

[assembly:InternalsVisibleTo("Unit.Tests.Assembly")] 

в AssemblyInfo.cs вашего " MyProject (C #) " ;. Это позволит вашим тестам получить доступ к внутренним методам тестирования.

Похоже, вам нужен InternalsVisibleToAttribute

Однако я бы рекомендовал против такого подхода - протестировать свои внутренние классы через открытый интерфейс или API.

Хотя [InternalsVisibleTo] это наиболее разумный способ, ИМО, есть по крайней мере 2 других способа сделать это:

  • Используя Отражение

     var method = instance.GetType().GetMethod(
        methodName, BindingFlags.NonPublic | BindingFlags.Instance, 
        null, paramTypeArray, null);
     return method.Invoke(instance, parameters);
    

Проблема с этим подходом заключается в том, что если имя метода или сигнатура изменятся, модульный тест начнет завершаться сбоем во время выполнения, тогда как [InternalsVisibleTo] это критическое изменение было бы легко обнаружено во время компиляции.

  • Используйте платформу тестирования, такую как Moles / Fakes или TypeMock

Я нашел вот это https://msdn.microsoft.com/en-us/library/hh598957.aspx Надеюсь, это кому-нибудь поможет.

Краткие сведения:

  • В вашем проекте модульного тестирования добавьте ссылку на тестируемый код.Вот как создать ссылку на проект кода в том же решении:
  • Выберите проект в Обозревателе решений.
  • В меню Проект выберите Добавить ссылку....
  • В диалоговом окне Диспетчер ссылок откройте узел Решение и выберите Проекты.
  • Проверьте название проекта code и закройте диалоговое окно.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top