Для унаследованного метода нужен еще один параметр

Вам лучше расширить TestCase с помощью «DataDrivenTestCase», который соответствует вашим потребностям. Вот рабочий пример: http://mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html

В отличие от параметризованных тестов, он позволяет красиво именованные тесты.

5
задан Alberto Zaccagni 18 November 2009 в 14:29
поделиться

3 ответа

Похоже, у вас действительно нет надлежащих отношений наследования - это нарушает Принцип субтитируемости Лискова , потому что вы не можете использовать этого «ребенка», как если бы он были экземпляром родителя без дополнительных знаний.

Как насчет того, чтобы сделать «дочерний» класс не производным от «родителя», а предоставить метод для дочернего элемента, который создаст экземпляр некоторого подкласс родителя, который "знает" соответствующий дополнительный бит информации? Если бы вы могли предоставить нам больше информации о том, что делают классы, мы могли бы привести более конкретные примеры того, как может выглядеть код.

РЕДАКТИРОВАТЬ: Очень сложно сделать это намного яснее, не зная больше о том, что вы ' повторюсь, но что-то вроде:

10
ответ дан 18 December 2019 в 11:58
поделиться

Соглашаясь с мнением Джона, что наследование Модель не работает, вы можете обрабатывать подобные сценарии, используя специальные объекты параметров. То есть вместо метода:

void myMethod(Object param1, Object param2, Object param3...);

у вас есть объект ParameterObject , который содержит требуемые параметры, и ваш метод выглядит так:

void myMethod(ParameterObject param);

Таким образом, вы можете добавить параметры к объекту параметра, и не влиять на интерфейс и реализованные методы и не изменять их.

Если я пишу метод и количество параметров кажется чрезмерным, и я считаю, что моя инкапсуляция никоим образом не нарушена (это часто случается в финансовом программном обеспечении, когда уравнения / модели занимают много входов),

5
ответ дан 18 December 2019 в 11:58
поделиться

Вы можете еще больше расширить идею ParameterObject (как было предложено Брайаном Агнью ), используя дженерики.

public interface Algorithm<P extends AlgorithmParameter> {
    public void doSomething(P parameters);
}

Таким образом, ваш CoolAlgorithm принимает CoolAlgorithmParameter , а ваш NiceAlgorithm принимает NiceAlgorithmParameter , поэтому вам не нужно беспокоиться об объекте параметра на самом деле то, что вы хотите - об этом позаботятся дженерики.

0
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: