Представьте, что у вас есть приложение, и вы хотите сделать модульные тесты и функциональные тесты над ним (не так уж трудно себе представить). У вас может быть абстрактный класс, назовем его AbstractTestClass, из которого распространяются все ваши модульные тесты.Тесты и проблема наследования
AbstractTestClass будет выглядеть следующим образом (с помощью JUnit 4):
class AbstractTestClass {
boolean setupDone = false;
@Before
public void before() {
if(!setupDone) {
// insert data in db
setupDone = true;
}
}
}
Вот что я борюсь с. У меня еще один абстрактный класс, который тестирования веб-интерфейсов:
class AbstractWebTestClass extends WebTestCase {
boolean setupDone = false;
@Before
public void before() {
if(!setupDone) {
// here, make a call to AbstractTestClass.before()
// init the interfaces
setupDone = true;
}
// do some more thing
}
}
Это в значительной степени тот же класс, за исключением того, что она проходит WebTestCase. Эта конструкция может дать мне возможность иметь одни и те же данные во время модульного тестирования, чем при тестировании интерфейса.
Обычно, имея дело с такой проблемой, вы должны использовать композицию над наследованием или использовать шаблон стратегии.
К сожалению, мне не очень нравится идея композиции над наследованием в этом конкретном сценарии, и я не вижу, как я могу использовать шаблон стратегии, возможно, есть дефект дизайна, и я не могу видеть решение.
Как я мог создать эту архитектуру, чтобы достичь своей цели.
Вы имеете в виду, что webtestcase расширяет область abstracttestcase? Можете ли вы четко указать, в чем проблема, у меня проблемы с пониманием ... – hvgotcodes 2010-12-08 19:53:45
Да.Это было бы желательно, но поскольку вы не можете выполнять множественное наследование в Java, я застрял в этом :) – ALOToverflow 2010-12-08 19:55:07