Вам лучше расширить TestCase с помощью «DataDrivenTestCase», который соответствует вашим потребностям. Вот рабочий пример: http://mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html
В отличие от параметризованных тестов, он позволяет красиво именованные тесты.
Похоже, у вас действительно нет надлежащих отношений наследования - это нарушает Принцип субтитируемости Лискова , потому что вы не можете использовать этого «ребенка», как если бы он были экземпляром родителя без дополнительных знаний.
Как насчет того, чтобы сделать «дочерний» класс не производным от «родителя», а предоставить метод для дочернего элемента, который создаст экземпляр некоторого подкласс родителя, который "знает" соответствующий дополнительный бит информации? Если бы вы могли предоставить нам больше информации о том, что делают классы, мы могли бы привести более конкретные примеры того, как может выглядеть код.
РЕДАКТИРОВАТЬ: Очень сложно сделать это намного яснее, не зная больше о том, что вы ' повторюсь, но что-то вроде:
Соглашаясь с мнением Джона, что наследование Модель не работает, вы можете обрабатывать подобные сценарии, используя специальные объекты параметров. То есть вместо метода:
void myMethod(Object param1, Object param2, Object param3...);
у вас есть объект ParameterObject
, который содержит требуемые параметры, и ваш метод выглядит так:
void myMethod(ParameterObject param);
Таким образом, вы можете добавить параметры к объекту параметра, и не влиять на интерфейс и реализованные методы и не изменять их.
Если я пишу метод и количество параметров кажется чрезмерным, и я считаю, что моя инкапсуляция никоим образом не нарушена (это часто случается в финансовом программном обеспечении, когда уравнения / модели занимают много входов),
Вы можете еще больше расширить идею ParameterObject
(как было предложено Брайаном Агнью ), используя дженерики.
public interface Algorithm<P extends AlgorithmParameter> {
public void doSomething(P parameters);
}
Таким образом, ваш CoolAlgorithm
принимает CoolAlgorithmParameter
, а ваш NiceAlgorithm
принимает NiceAlgorithmParameter
, поэтому вам не нужно беспокоиться об объекте параметра на самом деле то, что вы хотите - об этом позаботятся дженерики.