将两个值作为Junit5 ParameterizedTest的ValueSource的简单方法

c86crjj0  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(151)

我有很多布尔方法,比如boolean isPalindrome(String txt)要测试。
目前,我用 * 两个 * 参数化测试来测试这些方法中的每一个,一个用于true结果,一个用于false结果:

@ParameterizedTest
    @ValueSource(strings = { "racecar", "radar", "able was I ere I saw elba" })
    void test_isPalindrome_true(String candidate) {
        assertTrue(StringUtils.isPalindrome(candidate));
    }
    
    @ParameterizedTest
    @ValueSource(strings = { "peter", "paul", "mary is here" })
    void test_isPalindrome_false(String candidate) {
        assertFalse(StringUtils.isPalindrome(candidate));
    }

相反,我想在 * 一个 * 参数化方法中测试这些,就像下面的伪Java代码:

@ParameterizedTest
    @ValueSource({ (true, "racecar"),(true, "radar"), (false, "peter")})
    void test_isPalindrome(boolean res, String candidate) {
        assertEqual(res, StringUtils.isPalindrome(candidate));
    }

是否有一个ValueSource用于此?或者是否有其他方法以简洁的方式实现此目的?

mepcadol

mepcadol1#

通过来自Dawood ibn Kareem的非常有用的评论(关于问题),我得到了一个涉及@CsvSource的解决方案:

@ParameterizedTest
    @CsvSource(value = {"racecar,true", 
                        "radar,true", 
                        "peter,false"})
    void test_isPalindrome(String candidate, boolean expected) {
        assertEqual(expected, StringUtils.isPalindrome(candidate));
    }

我挺喜欢的:虽然代码使用字符串来表示布尔类型,但它非常紧凑,并将IMHO所属的东西放在一起。
在此阅读有关@CsvSource的信息。

相关问题