После прочтения сообщения в блоге , в котором упоминается, как неправильно выставлять общедоступный метод получения информации только для облегчения тестирования, я не смог найти конкретных примеров лучших практик.
Предположим, у нас естьэтот простой пример:
public class ProductNameList
{
private IList<string> _products;
public void AddProductName(string productName)
{
_products.Add(productName);
}
}
Скажем, по причинам объектно-ориентированного проектирования у меня нет необходимости публично раскрывать список продуктов.Как тогда я могу проверить, выполняла ли AddProductName () свою работу?(Возможно, продукт был добавлен дважды или не добавлен вовсе.)
Одним из решений является предоставление доступной только для чтения версии _products, где я могу проверить, есть ли у нее только одно название продукта - то, которое я передалAddProductName ().
В блоге, о котором я упоминал ранее, говорится, что речь идет скорее о взаимодействии (т. Е. Добавлено ли название продукта), а не о состоянии.Тем не менее, состояние это именно то, что я проверяю.Я уже знаю, что AddProductName () был вызван - я хочу проверить правильность состояния объекта, как только этот метод выполнил свою работу.
Отказ от ответственности: Хотя этот вопрос похож на Принципы балансировки:Модульное тестирование , (1) язык отличается (C # вместо Java), (2) этот вопрос содержит пример кода, и (3) я не чувствую, что на вопрос был дан адекватный ответ (т. Е. Код помог быпродемонстрировать концепцию).