Подтвердить что ты не робот

Есть ли эквивалент JUnit для атрибута тестового теста NUnit?

Я искал тестовый пример 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?

4b9b3361

Ответ 1

Обновление 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, подробности см. в ./p >


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

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.

Ответ 2

По-видимому, правильный ответ: "Нет, нет эквивалента". И это печально.

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

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

Ответ 3

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

Ответ 4

У вас может быть 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);
    }
}

Ответ 5

Это глупо, но вот обходной путь, который у меня есть, в конце. Используйте только 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);
}