如何使用Junit测试多个用例?

wkftcu5l  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(148)

我正在寻找一种在Junit中用一个测试来测试多个场景的方法,但是我还没有找到合适的语法。
换句话说,我想写一些类似于Nunit代码的东西:

[TestCase(3, 2, true)]
[TestCase(2, 3, true)]
[TestCase(3, 3, true)]
public void MyTest(int var1, int var2, bool var3)
{
    ...
}

字符串
任何帮助都是感激的。

7eumitmz

7eumitmz1#

@ParameterizedTest就是为了这个目的。一个单独的注解与它一起使用以提供数据。以下是使用它的官方指南。下面是一些如何使用它的例子:

值来源

@ParameterizedTest
@ValueSource(strings = { "racecar", "radar", "able was I ere I saw elba" })
void palindromes(String candidate) {
    assertTrue(StringUtils.isPalindrome(candidate));
}

字符串

枚举源

@ParameterizedTest
@EnumSource
void testWithEnumSourceWithAutoDetection(ChronoUnit unit) {
    assertNotNull(unit);
}

方法源

@ParameterizedTest
@MethodSource("stringProvider")
void testWithExplicitLocalMethodSource(String argument) {
    assertNotNull(argument);
}

static Stream<String> stringProvider() {
    return Stream.of("apple", "banana");
}

Cvs源码

@ParameterizedTest
@CsvSource({
    "apple,         1",
    "banana,        2",
    "'lemon, lime', 0xF1",
    "strawberry,    700_000"
})
void testWithCsvSource(String fruit, int rank) {
    assertNotNull(fruit);
    assertNotEquals(0, rank);
}

Cvs文件源

@ParameterizedTest
@CsvFileSource(resources = "/two-column.csv", numLinesToSkip = 1)
void testWithCsvFileSourceFromClasspath(String country, int reference) {
    assertNotNull(country);
    assertNotEquals(0, reference);
}

参数来源

@ParameterizedTest
@ArgumentsSource(MyArgumentsProvider.class)
void testWithArgumentsSource(String argument) {
    assertNotNull(argument);
}

public class MyArgumentsProvider implements ArgumentsProvider {

    @Override
    public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
        return Stream.of("apple", "banana").map(Arguments::of);
    }
}


考虑到你的问题,@ValueSource似乎是最符合你的写法的。

hs1rzwqc

hs1rzwqc2#

让我们解决Leetcode TwoSum,并在单个@Test注解下编写两个测试
Junit测试

int[] nums = {2, 7, 11, 5};

//second array
int[] second_nums = {4, 5, 7, 9, 11};

@Test
void twoSum(){
 TwoSum twosum = new TwoSum();
 assertArrayEquals(new int[]{2, 7}, twosum.twoSum(nums, 9));

//second test
TwoSum twosum_second = new TwoSum();
assertArrayEquals(new int[]{5, 9}, twosum_second.twoSum(second_nums, 14));

}

字符串
逻辑类

public class TwoSum(){
 public int[] twoSum(int[] nums, int target){
 //logic
 }
}

相关问题