2013-03-13 3 views
1

У меня есть два класса, которые имеют разные импликации одного и того же интерфейса. Существует также довольно большой и сложный набор модульных тестов для проверки правильности реализации.Лучшее решение для запуска одного и того же набора тестов на двух разных классах

Я ищу лучший способ запуска одного и того же набора тестов против двух или более возможных классов. К сожалению, из-за внешних ограничений я ограничился использованием JUnit4. Таким образом, фантастические новомодные тестовые рамки не будут работать для меня.

Не могли бы вы предложить свой любимый способ сделать это, не прибегая к слепому копированию теста в отдельный файл и вызывая головные боли для поддержания двух файлов в синхронизации.

Уточнение: Два класса должны быть полностью независимыми, цель состоит в том, чтобы проверить, что оба класса производят точно такой же вывод для одного и того же входа. Классы записываются в общий интерфейс. Таким образом, речь идет о том, как запускать те же тестовые примеры с двумя различными реализациями одного и того же интерфейса.

ответ

3

Как об этом:

public abstract class TestBase { 
    private TheInterface unitToTest; 

    protected abstract TheInterface getInterfaceImplementation(); 

    @Before 
    public void setImplementation() { 
     unitToTest = getInterfaceImplementation(); 
    } 

    @Test 
    public void test1 { 
     //excercise and assert unitToTest 
    } 
} 

public class ImplementationOneTest extends TestBase { 
    protected TheInterface getInterfaceImplementation() { 
     return new ImplementationOne(); 
    } 
} 

public class ImplementationTwoTest extends TestBase { 
    protected TheInterface getInterfaceImplementation() { 
     return new ImplementationTwo(); 
    } 
} 

etc. 
+0

Спасибо ... это eactly то, что нужно. Я удивлен, что никто не задавал этот вопрос раньше. – Vlad

0

Вы можете создать базовый тестовый класс с конструктором, получающим ваши интерфейсы (и методы тестирования внутри). И к конкретным классам, каждый из которых передает некоторую реализацию интерфейса до super().

0
  1. Реставратор общей реализации в один класс (базовый или делегат).
  2. Повторное использование текущих модульных испытаний при тестировании реорганизованного общего тока .
  3. Укажите конкретные тесты, в которых реализации различаются.

Если общих данных об осуществлении не существует, вы ДОЛЖНЫ иметь разные модульные тесты для каждой реализации.

Смежные вопросы