我正在为我作为初级 Java 开发人员的第一份工作面试而学习,现在我正在尝试学习 JUnit 测试用例。这是我遇到的一个例子,我必须说这对我来说真的很棘手(它是抽象代码所以我不知道如何测试它)。
public class JuiceMaker {
public Juice makeJuice(final List<Fruit> fruits) throws RottenFruitException {
for (final Fruit fruit : fruits) {
if (FruitInspector.isFruitRotten(fruit)) {
throw new RottenFruitException(fruit.getName() + “ is rotten. Cannot make juice.”);
}
}
return Juicer.juice(fruits);
}
}
我自己设法创建的唯一示例是这个:
JuiceMaker jm = new JuiceMaker();
@Test
public void isThrowingException() {
//when
try {
jm.throwsRuntime();
Assert.fail("Expected exception to be thrown");
} catch (RottenFruitException e) {
//then
assertThat(e)
.isInstanceOf(RottenFruitException.class)
.hasMessage((fruit.getName() + " is rotten. Cannot make juice.");
}
}
关于我可以对这段代码执行什么样的测试的任何提示?非常感谢您的帮助!
最佳答案
欢迎来到 JUnit,祝你面试顺利!
首先要问的问题是这个类提供的契约(Contract)是什么?它需要一个水果列表,测试是否有任何水果腐烂,如果是则抛出异常,否则将它们榨汁。您可以假设“juice”方法在别处进行了测试。
对我来说,这意味着这些测试:
- 列出单个好果
- 列出单个烂水果
- 列出几个好水果和一个烂水果
- 空列表
您还可以测试空值和无效值,但现在这样做可能有点过头了。
一旦您决定要测试什么,就可以开始考虑实现它们。看起来你的实现有几个错误,但你正朝着好的方向前进。您可能会发现 JUnit 的“expected”参数对于测试异常很有用。
关于java - 自定义方法的 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005947/