Как бы вы посоветовали «исправить» этот класс для лучшего тестирования?
public class Config {
private final ComplexA complexA;
private final ComplexB complexB;
(...)
Config(String[] args) {
complexA = privateMethodCalculatesA(args);
complexB = privateMethodCalculatesB(args);
(...)
}
}
Теперь все методы, которые вычисляют complexA/B/..., предназначены для быстрого сбоя, если пользователь вставляет несуществующие или неправильные параметры с System.exit. Проблема здесь в том, что Config искажается методами, которые следует тестировать изолированно.
Тем не менее, одни и те же методы не должны публиковаться, а результат следует кэшировать, поскольку расчет может быть дорогостоящим.
Просто попасть в цель и объявить указанные методы static protected и протестировать их по отдельности?
Как правильно это сделать?
@ user7294900 спасибо! Это полезно и уже используется в других тестах, но в этом конкретном сценарии при инициализации Config я бы издевался над множеством частных методов, просто чтобы подавить их. А новые переменные потребуют больше частных методов в конструкторе, что сделает недействительными предыдущие тесты. Это действительно разумнее, чем использовать эти методы с static protected? Спасибо за ваше время.
Я не уверен, что изменить код для теста лучше, но это зависит от




Рассмотрите возможность разделения ComplexA, ComplexB и т. д. На их собственные классы. Это решает проблему независимого тестирования. Тогда вы столкнетесь с проблемой собрать по кусочкам в единое целое. Скорее всего, для этой проблемы вы предпочтете композицию, а не наследование; но любой подход может работать.
Да, думаю, это исправит. Спасибо! Не знаю, почему я сопротивлялся самому прямому пути.
См. stackoverflow.com/questions/25594090/…