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

在JUnit/Spring测试类中使用helper类

权烨磊
2023-03-14

我想问一下你的知识。一个Spring启动应用程序包含各种映射器。这些应该进行测试。要测试映射器,应该读取一个JSON文件。这个JSON文件加载在每个测试文件中。到目前为止,该功能已在每个测试类中实现,我想将功能外包给一个助手类。我尝试如下:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {ObjectMapperConfig.class})
public class ResourceHelper {

  /**
   * Bean to de/serialize jsons.
   */
  @Autowired
  private ObjectMapper objectMapper;

  /**
   * Path to the file that will be used as input data.
   */
  @Value("classpath:productInputs/soundRecording.json")
  private Resource productInputInputFile;

  /**
   * Method to read a resource and convert it into a desired object.
   *
   * @param clazz Class of the desired object.
   * @param <T> Type of the desired object.
   * @return The desired object.
   * @throws IOException Thrown if there is a problem accessing the url.
   */
  public <T> T getSoundRecordingResource(final Class<T> clazz) throws IOException {

    final String productClaimString = IOUtils.toString(productInputInputFile.getURL(), AppConstants.ENCODING);

    return objectMapper.readValue(productClaimString, clazz);
  }

}

在测试类中,我调用助手如下:

  @Autowired
  private ResourceHelper resourceHelper;
  ....
  final ProductClaim productClaim = resourceHelper.getSoundRecordingResource(ProductClaim.class);

很遗憾,我收到以下错误消息:

组织。springframework。豆。工厂UnsatifiedDependencyException:创建名为“a.package”的bean时出错。路径CreditMapperTest:通过字段“resourceHelper”表示的未满足的依赖关系;嵌套异常为org。springframework。豆。工厂NoSuchBeanDefinitionException:没有类型为“a.package”的合格bean。路径ResourceHelper可用:至少需要1个符合autowire候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(必需=true)}

你在这方面有什么经验?我一般说错了吗?

共有2个答案

艾焕
2023-03-14

经过几次尝试,我找到了一个可行的解决方案,如果不是完美的话。我将ResourceHelper的注释替换为“@Component”。我在每个想要使用ResourceHelper的测试类中进行ResourceHelper和ObjectMapper的上下文配置。在我看来,这不是一个好的解决方案,但至少我可以避免代码重复。如果将来有人有类似的问题并找到更好的解决方案,欢迎他在这篇文章中发表。

丌官晔
2023-03-14

尝试在ResourceHelper上添加anotation@服务。这只是我的猜测。

 类似资料:
  • 问题内容: 我是第一次使用JUnit进行Java测试。我必须使用Java,并且想使用单元测试。 我的问题是:我有一个带有一些抽象方法的抽象类。但是有些方法不是抽象的。如何使用JUnit测试此类?示例代码(非常简单): 我要测试并运行。 在“JUnit常见问题解答”部分中,我找到了此链接,但我不理解作者想在此示例中说些什么。这行代码是什么意思? 问题答案: 如果您没有该类的具体实现,并且方法不是测试

  • 我试图使用spring和mockito对rest控制器进行单元测试。这是我的主控制器方法。 这是我的JUnit测试: 在输出响应中,测试失败,因为它得到404错误,但它预期成功代码为200。我相信我已经正确设置了独立配置,我会做错什么。为什么URI没有正确映射到方法?请注意,对于来自应用程序前端的相同URI,它工作正常。以下是我使用Postman工具为chrome测试的正确200响应的完整URI:

  • "JUnit Helper" 是一个 Eclipse 的 JUnit 单元测试助手插件,可在保存代码时生成测试案例。 Eclipse Update URL: http://junithelper.org/eclipse/plugins/site.xml

  • 问题内容: 我试过了: 但是,CRaSSHD仍会启动。尽管目前它不会损害测试,但我想在单元测试期间禁用不必要的模块,以加快速度并避免潜在的冲突。 问题答案: 最佳答案并不指向更简单,更灵活的解决方案。 只是放置一个 测试类上方的注释。这意味着其他测试不受当前测试的特殊情况的影响。如果存在影响大多数测试的配置,请考虑使用spring配置文件代替当前的最佳答案。 感谢@skirsch鼓励我将其从评论升

  • 我试过: 然而,混乱仍然开始。虽然目前它并不损害测试,但我希望在单元测试期间禁用不必要的模块,以加快速度并避免潜在的冲突。

  • 问题内容: 我有一堆JUnit测试用例(集成测试),它们在逻辑上分为不同的测试类。 我们能够为每个测试类加载一次Spring应用程序上下文,然后将其重新用于JUnit测试类中的所有测试用例 但是,我们只是想知道是否有一种方法可以对一堆JUnit测试类仅加载一次Spring应用程序上下文。 FWIW,我们使用Spring 3.0.5,JUnit 4.5并使用Maven构建项目。 问题答案: 是的,这