Изменение доступности класса в C Sharp

Я разрабатываю программное обеспечение, и мне нужно быстро изменить доступность класса. Основная причина этого заключается в том, что во время процесса тестирования класс должен быть общедоступным, чтобы его можно было увидеть из тестового модуля, а в рабочей версии класс должен быть внутренним. Вот образец:

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, однако это увеличивает время, необходимое для сборки программного обеспечения. Я использую теги препроцессора для условной сборки, и изменения можно выполнить быстро, но изменение доступности является проблемой. Как я могу это сделать? Заранее спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная причина этого заключается в том, что во время процесса тестирования класс должен быть общедоступным, чтобы его можно было увидеть из тестового модуля, а в рабочей версии класс должен быть внутренним.

Похоже, на самом деле вы хотите сделать его внутренним, но используйте InternalsVisibleToAttribute, чтобы иметь к нему доступ из тестового проекта.

Просто примените [assembly:InternalsVisibleTo("YourTestProject")] в своем производственном проекте, и все будет в порядке. (По моему опыту, это наиболее распространенная причина использования InternalsVisibleTo. Многие люди говорят, что не следует тестировать ничего, что не является общедоступным, но лично я считаю тестирование внутренних классов очень прагматичным.)

Если я не могу протестировать закрытый компонент, как мне убедиться, что он работает правильно?

tahasozgen 21.08.2024 08:48

@tahasozgen: Это действительно совсем другой вопрос, к которому, вероятно, есть много других вопросов SO. Аргумент заключается в том, что все должно быть публично наблюдаемым, иначе в этом нет необходимости. Однако я не разделяю эту точку зрения, и я не думаю, что нам следует углубляться в эту тему. Я включил в скобки только последнюю часть, чтобы предвидеть комментарии тех, кто подписался на это мнение.

Jon Skeet 21.08.2024 08:50

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