gpt4 book ai didi

java - 为什么我们要抛出异常并使用junit 4 +mockito断言它抛出异常

转载 作者:行者123 更新时间:2023-12-01 13:41:43 26 4
gpt4 key购买 nike

我正在学习mockito和单元测试。这是我的构造函数。为了测试构造函数是否抛出 jparse 异常,我有一个测试方法。为什么我们要生成自己的异常并断言它。测试情况如何?我们在这里测试什么?请帮忙!

public ClassA(File file) throws JsonParseException,
JsonMappingException, IOException {
ObjectMapper json= new ObjectMapper();
Map<String, String>> readValue= mapper.readValue(file,
Map.class);
..........
}

@Test(expected = JsonParseException.class)
public void testCorruotionInContent() throws Exception {
ObjectMapper json= Mockito.mock(ObjectMapper.class);
PowerMockito.whenNew(ObjectMapper.class).withNoArguments()
.thenReturn(json);
Mockito.when(
mapper.readValue(Mockito.any(File.class), Mockito.eq(Map.class)))
.thenThrow(new JsonParseException(null, null));
new ClassA(Mockito.mock(File.class));
}

最佳答案

您的测试很脆弱 - 正如评论中指出的那样,您没有测试有关具体实现的任何内容,而是测试了模拟。我什至不相信您正在测试任何东西。

请记住:您针对具体数据进行断言;你 mock 你绝对需要的东西。

鉴于我不知道Constructor的完整实现,我不知道什么会导致它失败。然而,我确实知道,至少在三种条件下它会失败:

  • 某种 IOException - 可能文件不存在或无法读取
  • 某种 JsonMappingException - 对象无法映射到 JSON
  • 某种 JsonParseException - 无法解析 JSON 实体

最好测试所有这些条件,以确保您的代码在出现任何异常时正常运行。如果您不希望您的代码能够处理它,那么它抛出这些异常是可以接受的,并且当您的代码中出现这种情况时,您正在验证是否确实抛出了异常。

但是我们如何做到这一点呢?让我们从简单的开始。

假设我们模拟了 File 的实例,无论何时何地我们决定读取它,我们都会得到一串无效的 JSON。这将是一个足够的测试案例 - 我们无法在主机文件系统上创建文件(不值得为启动不同的文件而头痛,因此简单地模拟它们是可以接受的),但是我们可以 指示来自文件的数据。

(在我写这个答案时,您已将类名称从 Constructor 更改为 Class。这不会成功 - 已经有一个 对象。)

关于java - 为什么我们要抛出异常并使用junit 4 +mockito断言它抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20697132/

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