Подумайте, что именно вы действительно заинтересованы в тестировании. Для вашего метода GetExpectedTech
вы передаете строку и возвращаете Tech
. предположительно, существует некоторая связь между переданной строкой и возвращенным Tech
. Это то, что вы должны тестировать (не нуль, вероятно, содержит ожидаемые значения и т. Д.).
Если побочным эффектом метода является то, что Tech
хранится в поле класса, то вы должны делать это по какой-либо причине (если не вы этого не должны делать). В настоящее время нет причин в коде, который вы опубликовали, однако наиболее вероятная причина может заключаться в том, что в классе будут использоваться другие методы, которые используют этот Tech
или возвращают его. В данный момент вы можете связать эти два метода, чтобы создать связь между этими двумя методами. Там нет ничего плохого с вызовом нескольких методов на вашем SUT, если отношения между методами является частью того, что вы пытаетесь проверить, так что вы можете сделать:
var expectedTech = sut.GetExpectedTech(someString);
var otherTech = sut.DoSomethingElse(someOtherParams);
Assert.AreEqual(expectedTech, otherTech);
Если это взаимодействие с Tech
, что вам нужно проверить для других методов вам может понадобиться посмотреть шаблоны создания, чтобы вы могли вводить Mock в свой SUT, но не зная, что еще делает ваш класс, трудно сказать, нужно ли это или нет.
Как вы уже сказали, вы можете получить доступ к элементу с помощью отражения, или PrivateObject, однако количество сценариев, в которых это правильная вещь, является относительно небольшим, поэтому, если вам нужно это сделать, это может быть знак что ваш класс нуждается в рефакторинге.
Я предлагаю прочитать [this] (http://stackoverflow.com/questions/1093020/unit-testing-and-checking-private-variable-value) –
Для пуристов, тестирование модулей тестирования, а не код/реализация. Итак, что бы вы ни делали в своем методе и как вы это делаете, не важно в модульном тестировании. Это то, что метод делает и ведет себя в зависимости от ваших ожиданий. Поэтому вам не нужно заботиться о частных элементах. Если внутренняя реализация изменяется, но метод по-прежнему ведет себя как раньше, ваш тест (ы) не должен прерываться. – JoeBilly