SaintThread дает вам хороший «прямой» ответ.
Но давайте шаг назад. Потому что вы делаете что-то не так в своем производственном коде. Скорее всего, ваш производственный код делает что-то вроде переключения на эту строку, которая обозначает состояние образца. И не только один раз, но и во всех его методах. И ... это не хороший дизайн OO!
Вместо этого, вы должны использовать полиморфизм, как:
abstract class Sample {
boolean canBeDeleted();
// ... probably other methods as well
с и различными конкретными подклассами, как
class ZSample extends Sample {
@Override canBeDeleted() { return false; }
// ...
И, наконец, у вас есть
class SampleFactory {
Sample createSampleFrom(String stateIdentifier) {
// here you might switch over that string and return a corresponding object, for example of class ZSample
И потом, ваши испытания сводятся к:
- Испытание завода; пример для ввода «Z», он возвращает экземпляр ZSample
- Тестирование всех ваших подклассов Образца; например, canBeDeleted() возвращает false для экземпляра ZSample
Дело в том, что ваш код выполняет работу FSM (конечного автомата). Тогда не используйте, если/elses повсюду; вместо этого выполните OO: создайте явный конечный автомат. И бесплатный бонус: этот подход также позволит превратить ваши образцы в неизменяемым штук; который чаще всего лучше, чем иметь дело с объектами, которые могут изменить свое состояние с течением времени (поскольку неизменность помогает много с многопоточными проблемами, например).
Отказ от ответственности: если ваш класс «Образец» относится только к одному методу, возможно, вышеперечисленное является излишним. Но в любом другом случае ... может быть, отступите и посмотрите, добавят ли мои предложения ценность для вашего дизайна!
Спасибо. Отличное объяснение. –
Добро пожаловать. Забавная вещь; в первый раз я получаю +10 баллов по двум ответам ... в тот же день. Жаль, что большая часть этой репутации ... для меня потеряна. Но все же - рад, что я мог бы помочь! – GhostCat