Я разрабатываю программное обеспечение, и мне нужно быстро изменить доступность класса. Основная причина этого заключается в том, что во время процесса тестирования класс должен быть общедоступным, чтобы его можно было увидеть из тестового модуля, а в рабочей версии класс должен быть внутренним. Вот образец:
public interface ILdapService : IDisposable
{
// It will be internal in production. (TODO)
// YAP1 It will be public in the test. ()
/// <summary>
///
/// </summary>
/// <param name = "email">Ldap user name without domain name</param>
/// <param name = "password">Ldap passsword.</param>
bool Verify(string email, string password);
}
Я решаю эту проблему с помощью тегов редактора Visual Studio, однако это увеличивает время, необходимое для сборки программного обеспечения. Я использую теги препроцессора для условной сборки, и изменения можно выполнить быстро, но изменение доступности является проблемой. Как я могу это сделать? Заранее спасибо.
Основная причина этого заключается в том, что во время процесса тестирования класс должен быть общедоступным, чтобы его можно было увидеть из тестового модуля, а в рабочей версии класс должен быть внутренним.
Похоже, на самом деле вы хотите сделать его внутренним, но используйте InternalsVisibleToAttribute
, чтобы иметь к нему доступ из тестового проекта.
Просто примените [assembly:InternalsVisibleTo("YourTestProject")]
в своем производственном проекте, и все будет в порядке. (По моему опыту, это наиболее распространенная причина использования InternalsVisibleTo
. Многие люди говорят, что не следует тестировать ничего, что не является общедоступным, но лично я считаю тестирование внутренних классов очень прагматичным.)
@tahasozgen: Это действительно совсем другой вопрос, к которому, вероятно, есть много других вопросов SO. Аргумент заключается в том, что все должно быть публично наблюдаемым, иначе в этом нет необходимости. Однако я не разделяю эту точку зрения, и я не думаю, что нам следует углубляться в эту тему. Я включил в скобки только последнюю часть, чтобы предвидеть комментарии тех, кто подписался на это мнение.
Если я не могу протестировать закрытый компонент, как мне убедиться, что он работает правильно?