Я бы повторно использовал код либо с наследованием, либо с агрегацией.
Чтобы получить самый короткий код, я бы переместил создание проверенного экземпляра в метод фабрики, скажем, в класс XmlImplementationTest, и унаследовал от него TextImplementationTest:
XmlImplementationTest extends TestCase
{
Interface tested = null
Interface createTested() { return new XmlImplementation() }
...
void setUp() { tested = createTested(); }
}
TextImplementationTest extends XmlImplementationTest
{
override Interface createTested() { return new TextImplementation() }
}
Это не совсем правильный дизайн ОО, так как TextImplementationTest
НЕ XmlImplementationTest
. Но обычно вам не нужно заботиться об этом.
Или переадресовать вызовы тестового метода к некоторому общему классу утилит. Это может потребовать больше кода и не показывать правильный класс теста в отчетах о тестировании, но может быть проще для отладки.