Есть ли JUnit, эквивалентный атрибуту тестового случая NUnit? - PullRequest
24 голосов
/ 29 декабря 2010

Я гуглил тестовый пример JUnit, и он предлагает кое-что, что выглядит намного более сложным для реализации - где вам нужно создать новый класс, расширяющий тестовый пример, который вы затем вызываете:

public class MathTest extends TestCase {
    protected double fValue1;
    protected double fValue2;

    protected void setUp() {
       fValue1= 2.0;
       fValue2= 3.0;
    }
 }

public void testAdd() {
   double result= fValue1 + fValue2;
   assertTrue(result == 5.0);
}

но я хочу что-то действительно простое, например, тестовые случаи NUnit

[TestCase(1,2)]
[TestCase(3,4)]
public void testAdd(int fValue1, int fValue2)
{
    double result= fValue1 + fValue2;
    assertIsTrue(result == 5.0);
}

Есть ли способ сделать это в JUnit?

Ответы [ 5 ]

11 голосов
/ 10 июля 2013

2017 обновление: JUnit 5 будет включать параметризованные тесты с расширением junit-jupiter-params. Некоторые примеры из документации :

Один параметр примитивных типов (@ValueSource):

@ParameterizedTest
@ValueSource(strings = { "Hello", "World" })
void testWithStringParameter(String argument) {
    assertNotNull(argument);
}

Значения, разделенные запятыми (@CsvSource), позволяют указывать несколько параметров, аналогичных приведенным ниже JUnitParams:

@ParameterizedTest
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" })
void testWithCsvSource(String first, int second) {
    assertNotNull(first);
    assertNotEquals(0, second);
}

Другие исходные аннотации включают @EnumSource, @MethodSource, @ArgumentsSource и @CsvFileSource, подробности см. В документации .


Оригинальный ответ:

JUnitParams (https://github.com/Pragmatists/JUnitParams) выглядит неплохой альтернативой. Он позволяет вам указывать параметры теста в виде строк, например:

@RunWith(JUnitParamsRunner.class)
public class MyTestSuite {
    @Test
    @Parameters({"1,2", "3,4"})
    public testAdd(int fValue1, int fValue2) {
       ...
    }
}

Вы также можете указать параметры с помощью отдельных методов, классов или файлов, обратитесь к JUnitParamsRunner api docs для получения подробной информации.

11 голосов
/ 08 апреля 2013

Видимо, правильный ответ: «Нет, нет эквивалента». И это грустно.

Параметризованные тесты и теории JUnit (как упомянуто здесь и в JUnit - Как проверить метод с другими значениями? ) оба могут выполнить свою работу, но нигде не так чисто. К сожалению, их сложно писать и трудно читать.

Я надеюсь, что однажды JUnit сможет добавить более простой NUnit-подобный синтаксис. Похоже, это не должно быть так сложно; хотя, может быть, нужны лямбды?

6 голосов
/ 09 сентября 2012

Также стоит проверить Теории JUnit и точки данных .Они позволяют вам параметризовать тесты, но запускают комбинацию типов всех пар на ваших входах.

5 голосов
/ 03 августа 2014

Вы можете использовать junit с параметрами, используя zohhak

Пример использования:

@RunWith(ZohhakRunner.class)
public class HelloWorldTest {

    @TestWith({
        "2, 1,   3",
        "3, 5,   8"
    })
    public void should_add_numbers(int addend1, int addend2, int result) {

        assertThat(addend1 + addend2).isEqualTo(result);
    }
}
2 голосов
/ 04 июня 2012

Это глупо, но вот обходной путь, который у меня есть в конце. Используйте 4 строки вместо одной строки.

@Test
public void testAdd1() {
    testAdd(1,2);
}
@Test
public void testAdd2() {
    testAdd(3,4);
}
private void testAdd(int fValue1, int fValue2)
{
    double result= fValue1 + fValue2;
    assertIsTrue(result == 5.0);
}
...