Параметризованные тесты JUnit с не примитивными параметрами? - PullRequest
5 голосов
/ 09 февраля 2012

Есть хорошая возможность запустить тест JUnit с параметрами, где один и тот же метод теста выполняется несколько раз с разными данными, как описано здесь: http://junit.org/apidocs/org/junit/runners/Parameterized.html

К сожалению, кажется возможным использовать только примитивные параметры или строки, но не объекты. Есть ли какое-нибудь решение для этого?

Ответы [ 4 ]

7 голосов
/ 09 февраля 2012

Тип метода data() при использовании аннотации @ Parameters равен List<Object[]>, поэтому вы можете поместить любой объект.

Для передачи, например,Money объект, ваш массив для преобразования в список будет:

{{new Money (26, "CHF")}, {new Money (12, "USD")}}

Конструктор тестового класса должен принять объект Money в качестве аргумента.

1 голос
/ 05 декабря 2012

недавно я начал zohhak проект. позволяет писать:

@TestWith({
   "25 USD, 7",
   "38 GBP, 2",
   "null,   0"
})
public void testMethod(Money money, int anotherParameter) {
   ...
}
0 голосов
/ 01 февраля 2016

Использование объекта также возможно с использованием Junit @Parameters.

Пример: -

@RunWith(Parameterized.class)
public class TestParameter {

@Parameter(value=0)
public int expected;

@Parameter(value=1)
public int first;

@Parameter(value=2)
public int second;
private Calculator myCalculator;


@Parameters(name = "Test : {index} : add({1}+{2})= Expecting {0}")//name will be shared among all tests
public static Collection addNumbers() {
    return Arrays.asList(new Integer[][] { { 3, 2, 1 }, { 5, 2, 3 }, { 9, 8, 1 }, { 200, 50, 150 } });
}
@Test
public void testAddWithParameters() {
    myCalculator = new Calculator();
    System.out.println(first + " & " + second + " Expected = " + expected);
    assertEquals(expected, myCalculator.Add(first, second));
}

}

0 голосов
/ 10 февраля 2012

Используйте взамен JUnitParams ... junitparams.googlecode.com

...