gpt4 book ai didi

junit - 我应该拆分方法以便在 JUnit 中重用吗?

转载 作者:行者123 更新时间:2023-12-02 01:59:15 25 4
gpt4 key购买 nike

我有以下 JUnit 测试。我正在测试的方法非常简单,它只是接收一个数字并返回一个及其除数的列表。我不想多次重复测试代码,因此我创建了一个辅助方法,testDivisorsAux:

@Test
public final void testDivisors() {
testDivisorsAux(1, new int[] { 1 });
testDivisorsAux(6, new int[] { 1, 2, 3, 6 });
testDivisorsAux(0, new int[] { });
...
}

private final void testDivisorsAux(final int number, final int[] expected) {
List<Integer> divisors = Util.divisors(number);
assertSame(divisors.size(), expected.length);
for (int i : expected) {
assertTrue(divisors.contains(i));
}
}

一切正常,我只是想知道...这是一种不好的做法吗?我应该以不同的方式编写测试吗?也许将所有代码保留在“@Test 方法”中?

PMD 告诉我,JUnit 测试应该包含 assert() 或 failure()(对于第一种方法),执行测试的 JUnit 4 测试应该使用 @Test 注释 (对于第二个)。我知道 PMD 仅使用正则表达式(实际上是 XPath)来确定我违反了哪些规则...所以我倾向于认为这只是一个“误报”警告。但无论如何,我想知道我是否做错了什么。 (除了编写测试的时间比正在测试的方法长 4 倍之外:)

当我搜索与此类似的问题时,我发现了一种称为参数化测试的东西......但它似乎是面向更大场景的东西,不是吗?

最佳答案

我个人认为这样做很好的做法。走得太远并构建大量代码来进行测试存在一个小危险,在这种情况下,您应该重新考虑正在测试的内容的设计。您确实不想编写测试来测试您的测试,但您给出的示例似乎很好,这意味着您的测试用例要简单得多。

我没有使用过 PMD,就我个人而言,我会尝试将其配置为忽略这些警告。如果他们担心您,您也许可以更改代码来摆脱它们。我的猜测是第二个警告是因为你的辅助方法以单词 test 开头。在junit3中,所有以test开头的方法都是测试。为什么不将方法 testDivisorsAux 重命名为assertDivisors - 也许拥有一个以assert 开头的方法也有助于解决第一个警告。

关于junit - 我应该拆分方法以便在 JUnit 中重用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3653496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com