Могу ли я установить личную переменную экземпляра только для чтения?

1

Я хотел бы знать, можно ли как-то установить private readonly переменную класса private readonly через отражение или что-то еще?

Рассмотрим следующий класс:

public class TestSevice
{
    private readonly someClassType m_variable;

    public TestService()
    {
        m_variable = //call to some processing function
    }

    private static int CalculateStuff(int x, int y)
    {
        //some processing and return
    }
}

Я пишу блок-тест для private static метода CalculateStuff(int x, int y), который я могу вызвать через отражение:

PrivateType pt = new PrivateType(typeof(AvatarService));
int actialRes = (int)pt.InvokeStatic("CalculateStuff", parameters);

Проблема в том, что для моего модульного теста я не хочу устанавливать m_variable или устанавливать его на null при вызове static функции.

Итак, возможно ли, что конструктор без параметров ctor не устанавливает m_variable или пользовательский набор для чего-либо в модульном тесте?

Редактирование: некоторые сведения о //call to some processing function Здесь выполняется вызов для запуска получателя очереди сообщений.

Класс TestService в начале рабочей роли, и, следовательно, приемник очереди запускается в ctor. Затем приемник очереди сообщений вызывает функцию-оболочку в классе TestSevice, которая, в свою очередь, вызывает CalculateStuff. И так как я просто хочу протестировать основную бизнес-логику, я не хочу запускать приемник очереди (который накладывает определенные зависимости).

  • 1
    Не могли бы вы добавить это в конструктор? Я новичок в модульном тестировании, но я почти уверен, что это все-таки понятие о модульном тестировании? РЕДАКТИРОВАТЬ: Извинения, я неправильно прочитал, вы хотите установить это при вызове статической функции. Я не верю, что это возможно (я могу ошибаться), кажется, вы боретесь против всей цели модификатора private доступа.
  • 0
    Смотрите также stackoverflow.com/questions/7075938/…
Показать ещё 8 комментариев
Теги:
unit-testing
reflection

2 ответа

1

Если вы пытаетесь протестировать класс, изменив его поведение, вы уже пропустили эту точку.

Если есть способ, которым этот класс может попасть в определенный тест, то как вы его должны проверить. С помощью read only единственный способ сделать это - через конструктор.

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

Если его нужно изменить перед каждым вызовом при вычислении, и вы находитесь в ситуации, когда, по вашему мнению, вам нужно, чтобы функция была статичной, вы, вероятно, должны иметь ее как дополнительный параметр. Это означает, что он может быть дольше доступен только для чтения. Выполнение этого способа отключит его от состояния данного экземпляра, но если вы пытаетесь/должны изменить значение, оно не должно быть только для чтения.

0

По-видимому, ответ "да". qaru.site/questions/5043/... Но это не похоже на вашу проблему. Похоже, вы хотите, чтобы альтернативный конструктор вызывал во время модульного тестирования, что предотвратит запуск кода, задающего вашу переменную. Для этого вам придется внести изменения в свой конструктор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню