2015-03-23 4 views
3

Я хочу создать 2 JUnit TestSuites. Они оба используют одни и те же классы тестов, но каждый из них должен использовать разные параметры. Например, в наборе тестов A я хочу, чтобы мои данные собирались из файла A и записывались в базу данных A. В тестовом наборе B я хочу, чтобы мои данные собирались из файла B и записывались в базу данныхB.Параметры передачи для теста JUnit из класса TestSuite

Причины я использую тесты во для этого, потому что:

  1. Я могу поставить все специфические параметры в Тестах классах
  2. можно повторно использовать testclasses
  3. я могу выбрать, который Тесты для запуска. Я не хочу, чтобы все тесты всегда запускались со всеми возможными параметрами!

Проблема в том, что я не могу передать параметры. Я понимаю, как класс Parameterized работает с JUnit, но он не допускает точку 3 в списке выше. Если я воспользуюсь приведенным ниже кодом, он будет запускать мой тестовый класс с использованием обоих соединений данных, что не является тем, чего я хочу достичь.

@RunWith(value = Parameterized.class) 
public class TestCheckData 
{ 
    private File file; 
    private DatabaseSource databaseSource; 

    public TestCheckData(File file, DatabaseSource databaseSource) 
    { 
     this.file = file; 
     this.databaseSource = databaseSource; 
    } 

    @Parameters 
    public static Iterable<Object[]> data1() 
    { 
     return Arrays.asList(new Object[][] 
     { 
      { TestSuiteA.DATA_FILE_A, TestSuite1.DATABASE_A }, 
      { TestSuiteB.DATA_FILE_B, TestSuite1.DATABASE_B } 
     }); 


    } 

Я уже нашел способ передачи конфигураций в весеннем контексте in this question, но я не использую никаких специальные рамки.

ответ

1

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

public abstract class StaticParameters { 
    public static File dataFileToUse = null; 
    public static DatabaseSource databaseToUse = null; 
} 

public class Suite1Params extends StaticParameters { 
    @BeforeClass 
    public static void setParams() { 
    dataFileToUse = DATA_FILE_A; 
    databaseToUse = DATABASE_A; 
    } 
} 

public class Suite2Params extends StaticParameters { 
    @BeforeClass 
    public static void setParams() { 
    dataFileToUse = DATA_FILE_B; 
    databaseToUse = DATABASE_B; 
    } 
} 

Тогда вы бы просто сделать Suite1Params или Suite2Params первым в списке люкса. Возможно, вам придется добавить фальшивую запись @Test в классы params, я не уверен, требует ли это бегун Suite.

+0

Это грязная, но она работала :) – user1884155

0

Вы можете изменить тесты, чтобы получить параметры из файла конфигурации. Таким образом, у вас всегда будет только 1 Suite.

Путь к файлу конфигурации можно просмотреть с помощью свойства System.

Затем при вызове набора тестов вы можете перейти в другой файл конфигурации, изменив свойство с помощью опции -D на JVM.

Так, например, если вы назвали proprerty env.properties тогда ваша команда будет:

%java -Denv.properties=prod.config runMyTests 

или

%java -Denv.properties=dev.config runMyTests 

и т.д.

+0

Вы знаете как передать файлы конфигурации при запуске модульных тестов в Eclipse? Мне понадобится два файла конфигурации, один для набора A и для набора B, но как я могу сказать мне, что testrunner использует A или B? – user1884155

+0

@ пользователь1884155 есть. Если вы перейдете в Run Configurations ... Затем отредактируйте конфигурацию. На вкладке JRE имеется текстовая область для ввода аргументов VM. Вот где вы должны добавить опции '-D', которые вы хотите добавить (включая« -D ») – dkatzel