2014-01-28 2 views
3

У меня есть запрос об использовании параметризованных тестов для модульного тестирования моих API. Теперь вместо того, чтобы строить ArrayList какJunit параметризованные тесты с использованием ввода файла

Arrays.asList(new Object[]{ 
    {1},{2},{3} 
}); 

Я хочу читать строки в файле один на один разделить их пространство и заполнить их в массиве. Таким образом, все будет обобщено. Может ли кто-нибудь предложить мне такой метод с примером?

Также есть способ, которым я мог бы тестироваться без объявления различных аргументов в качестве частных членов и инициализации их в конструкторе тестового блока?

EDIT: код, как спросил Дункан

@RunWith(Parameterized.class) 
public class JunitTest2 { 

    SqlSession session; 
    Integer num; 
    Boolean expectedResult; 
    static BufferedInputStream buffer = null; 

    public JunitTest2(Integer num, Boolean expected){ 
     this.num = num; 
     this.expectedResult = expected; 
    } 

    @Before 
    public void setup() throws IOException{ 
     session = SessionUtil.getSqlSessionFactory(0).openSession(); 
     SessionUtil.setSqlSession(session); 
     buffer = new BufferedInputStream(getClass().getResourceAsStream("input.txt")); 
     System.out.println("SETUP!"); 
    } 

    @Test 
    public void test() { 
     assertEquals(expectedResult, num > 0); 
     System.out.println("TESTED!"); 
    } 

    @Parameterized.Parameters 
    public static Collection getNum() throws IOException{ 
     //I want my code to read input.txt line by line and feed the input in an arraylist so that it returns an equivalent of the code below 

     return Arrays.asList(new Object[][]{ 
      {2, true}, 
      {3, true}, 
      {-1, false} 
     }); 
    } 
    @After 
    public void tearDown() throws IOException{ 
     session.close(); 
     buffer.close(); 
     System.out.println("TEARDOWN!"); 
    } 
} 

Кроме того, моя input.txt будет выглядеть следующим образом:

2 true 
3 true 
-1 false 
+0

Итак, вы хотите, чтобы файл с содержимым '1 2 3' и разбором что? Можете ли вы показать нам, что вы пробовали, чтобы мы знали, где именно вы застряли? Что касается вашего второго вопроса, ответ будет отрицательным, если вы хотите использовать параметризованные тесты. –

+0

Для второй части вы можете создавать общедоступные поля (без конструктора) и аннотировать их с помощью '@ Parameter' (см. [Этот образец] (https://gist.github.com/Regisc/7711a96d8e99fd172a71)) –

+0

Просьба иметь Посмотрите мой код. Я новичок в Junit, так что просто приложение для начинающих. – Sourabh

ответ

12
@RunWith(JUnitParamsRunner.class) 
public class FileParamsTest { 

    @Test 
    @FileParameters("src/test/resources/test.csv") 
    public void loadParamsFromFileWithIdentityMapper(int age, String name) { 
     assertTrue(age > 0); 
    } 

} 

JUnitParams поддерживает загрузку данных из файла CSV.

CSV-файл будет содержать

1,true 
2,false 
+0

Я обязательно попробую это. Выглядит многообещающе и может быть именно тем, что мне нужно. Спасибо :) – Sourabh

+0

Да, эта библиотека очень полезна, я использую ее много. Он также решает некоторые недостатки Юнита. A необходимо попробовать для проверки данных. –

+0

Отлично, я искал это годами. Как мы видим, тесты DataDriven должны быть очень простыми (технически), и тогда их можно поддерживать в превосходном состоянии по бизнесу/требованиям/тестированию. – Bastl

2

Посмотрите на проект junitparams, особенно this example. Он покажет вам, как использовать CSV-файл для ввода параметров. Вот краткий пример:

Мой файл test.csv:

1, one 
2, two 
3, three 

Мой тест:

package com.stackoverflow.sourabh.example; 

import static org.junit.Assert.assertTrue; 
import junitparams.FileParameters; 
import junitparams.JUnitParamsRunner; 

import org.junit.Test; 
import org.junit.runner.RunWith; 

@RunWith(JUnitParamsRunner.class) 
public class FileReadingParameterizedTest { 

    @Test 
    @FileParameters("src/test/resources/test.csv") 
    public void testWithCSV(int number, String name) { 
     assertTrue(name + " is not at least two", number >= 2); 
    } 

} 

Очевидно, что первый тест потерпит неудачу, производя сообщение об ошибке один не является, по крайней мере два.

+0

Спасибо большое :) – Sourabh

+0

Вы очень желанны. Только недавно открыл lib, и это оказалось весьма полезным. – blalasaadri

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