2013-09-09 5 views
0

Мне нужно создать testuite, с подсудиями, содержащими тесты, которые проверяют данные для меня (с использованием библиотеки java). Цель этого теста - проверить, хорошо ли работает библиотека. Подумайте об этом, как проверка определений антивирусных сканеров. У меня есть опыт работы со старым Junit/Nunit и ожидал, что это будет довольно легко. Однако, оказывается, это не с Junit4.Junit создавать тесты на основе динамических данных

У меня есть следующая файловая раскладка:

typename(dir) 
    - file1 
    - file2 
typename(dir) 
    - file1 
    - file2 
    - file3 
etc. 

мне нужно запустить UnitTest, который проверяет каждый файл, и живет в «TYPENAME» TestSuite. Идея заключается в том, чтобы обработать файловую систему, а затем генерировать testcases и сьюты динамически:

for (File typeNameDir: typenameDirs) 
{ 
    TestSuite typenameSuite= new TestSuite(); 
    typenameSuite.setName(typename); 
    for (File file: filesInThisDir) 
    { 
    typenameSuite.addTest(new FileTest(File)); 
    } 
} 

Проблема теперь что addTest ожидает класс, который реализует Test, но это интерфейс рамок и не может быть использовано, так как из которые необходимо выполнить. Я также пытался расширить TestCase, но это также не работает: мне нужно установить имя теста там вручную, и он все еще не работает нормально. Также не рекомендуется расширять классы junit.framework.

Итак, похоже, мне нужно использовать опцию Parameterized, но это не позволяет мне вводить динамически генерируемые данные ... Итак, что мне делать?

Я имею в виду только переход к JUnit 3.

ответ

0

Вы можете посмотреть на этой post. Автор описывает решение для генерации тестового примера во время выполнения.

И только для любопытства, почему @Parameterized не позволяет вам вводить динамически генерируемые данные? Это не работает?

@Parameters 
public static Collection<Object[]> data() { 
      List<Object[]> data = new ArrayList<Object[]>(); 
      //load files 
      for (File file: filesInThisDir) { 
       data.add(file); 
      } 

      return data; 
} 
+0

Да, но поскольку этот метод является «статическим», я не могу предоставить этот метод, например, динамический путь, где ему нужно получить его файлы. – Peterdk

+0

@Peterdk JUnit необходимо знать, сколько тестовых примеров будет запущено до того, как он выполнит какой-либо из них, поэтому метод является статическим. Не могли бы вы привести пример динамического пути? Прости, что не понимаю. – Hippoom

+0

Как видно в startpost, мне нужна отдельная testuite для каждой папки имен. Поэтому параметризованный тест должен знать, какая папка ему нужна: 'filesInThisDir' должен каким-то образом динамически получать путь к файлу. Это невозможно. – Peterdk