java - 自定义方法的 JUnit 测试用例

标签 java junit

我正在为我作为初级 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/

相关文章:

java - 单元测试重载方法

java - 将文件另存为音频文件后无法播放

java - 嵌套类型参数如何工作?

java - 排除一个特定单元测试的 Maven 依赖项

java - 如何简化测试?

java - 我有一个具有多种方法的类文件,我可以从测试用例中调用该类吗

java - 是否有没有 JSON 限制的 JavaScript 对象文字的解析器/编码器?

java - 在 AOP 注释切入点上获取注释

java - 寻求建议: overview/detail representation of models

junit - HSQLDB 和 group by 的奇怪行为