测试Java方法输出的"正确"方法是什么?

Dav*_*ver 5 java testing junit unit-testing

在Python中,我经常会看到类似这样的测试:

tests = [
    (2, 4),
    (3, 9),
    (10, 100),
]
for (input, expected_output) in tests:
    assert f(input) == expected_output
Run Code Online (Sandbox Code Playgroud)

使用JUnit在Java中编写这样的测试(其中指定了一组测试用例,然后循环运行每个测试用例)的"正确"方法是什么?

谢谢!

抢先回应:我意识到我可以这样做:

assertEquals(4, f(2))
assertEquals(9, f(3))
....
Run Code Online (Sandbox Code Playgroud)

但是......我希望有更好的方法.

Nic*_*eys 11

一样.

    int[][] tests = {
            {2, 4},
            {3, 9},
            {10, 100}
    };
    for (int[] test : tests) {
        assertEquals(test[1], f(test[0]));
    }
Run Code Online (Sandbox Code Playgroud)

当然不像python那么漂亮,但很少有东西.

您可能还想研究JUnit Theories,这是未来的一项功能......


sta*_*lue 5

正确的方法是编写单独的断言语句,即使您不喜欢它.

它避免了不必要的复杂化,当它失败时,有时更容易看到哪个值失败(无需启动调试器).

但是,如果您自动生成测试数据,则会有不同的故事.