当前位置: 首页 > 知识库问答 >
问题:

sonarQub覆盖范围未触发时触发Mockito

范翰飞
2023-03-14

我的sonarQube覆盖测试检测到该代码的捕获块在测试期间从未到达

代码:

try{
  return FileUtils.convertFileToByte(project.getFolder()+".zip");
}catch(IOException ioe){
  throw new GeneratorException("Error when creating ",ioe);
}

我的静态函数ConvertFileToByte()可以抛出一个IOExctive。

相关测试:

try (MockedStatic<FileUtils> fileUtils = Mockito.mockStatic(FileUtils.class)) {
  fileUtils.when(() -> FileUtils.convertFileToByte(anyString())).thenThrow(IOException.class);
}
assertThatThrownBy(() -> repository.download(project)).isExactlyInstanceOf(GeneratorException.class);

我认为问题来自这样一个事实,即“thenThrow”函数是在执行之后完成的,因此永远不会到达catch块。我试图将调用返回与分配分开,但它从未在测试中触发catch函数,并根据sonar添加代码气味。

有什么想法和建议让这个测试发挥作用吗?提前感谢

共有1个答案

邵璞
2023-03-14

所以我找到了解决方案,但这并不是专门针对这部分代码的。感谢胡安发表评论。事实上,我在代码中有一个函数生成了完全相同的异常,当错误发生时,它发生在第一个异常期间,而它从未经过第二个catch块。

 类似资料:
  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • 我有一个名为的类,它扩展了接口和。但是,当我使用该类并且不调用其方法时,不会触发资源泄漏的警告。我有另一个名为的类,它有一个名为的方法,该方法返回一个对象。当我以以下方式创建新的对象时,不会触发任何资源泄漏警告: 为什么这里没有触发资源泄漏的警告,因为从未关闭?这里的答案是,触发它所需要的只是实现接口,但我的类同时实现了和,但在未关闭时不会触发任何警告。

  • 问题内容: 尝试使用vue watch方法,但即使使用,它似乎也不会触发某些对象。 在我的组件中,我收到一个数组作为prop,它们是创建以下表单的字段。我可以构建表单并将其动态绑定到一个名为的对象,并且一切正常(我在vue开发工具中看到,甚至可以按计划提交表单作品) 但是我在尝试观察该动态对象的变化时遇到了问题。 问题答案: 来自文档 由于现代JavaScript的局限性(以及Object.obs

  • 我正在尝试使用MethodChannel和Kotlin作为我的语言选择,将Android的Zendesk原生SDK移植到Flatter中。 当我在项目中直接使用Kotlin代码时,它就可以工作了 这个指的是活动,我想应用程序已经在里面了,但是当我试图制作独立的插件时,事情有点不同。我需要实现ActivityAware来获取活动(在flatter插件中获取活动引用)。 https://github.

  • 我正在试验Dynamo db和lambda,并且在以下流程中遇到问题: Lambda A由put to S3事件触发。它获取对象(一个音频文件),计算其持续时间,并在dynamoDB中为每30秒的段写入一条记录。 Lambda B由DynamoDB触发,从S3下载文件并对Dynamo行中定义的30秒记录进行操作。 我的问题是,当我运行这个流时,函数A通过函数B写入Dynamo所需的所有行 似乎没有

  • 我试图使用对基于Tomcat的Jersey应用程序强制执行某些身份验证。我遵循了这份文件。问题:筛选器从未触发 web.xml文件: