gpt4 book ai didi

java - 如何对旧的遗留应用程序进行单元测试

转载 作者:行者123 更新时间:2023-11-28 20:01:13 26 4
gpt4 key购买 nike

我被分配到旧的 web 应用程序(JSF 1.2 + Eclipselink),没有像 EJB 或 Spring 这样的中间件,应用程序的服务层由直接调用 EntityManager 的 POJO 组成。代码结构是这样的 SomeBean(backing bean) -> SomeServices(这里是业务逻辑和数据访问代码的混合体),没有单独的 DAO 层。服务类的代码通常是这样的(这里非常简化):

 public void someMethod(SomeEntity someEntity, ....) throws SomeServiceExeption {
try{
entitiyManager.getTransaction.begin();
//lotOfLogicHereAndCallingSomeOtherPrivateMethods
entitiyManager.getTransaction.commit();
}catch(Exception e){
log.error("");
if(entitiyManager.getTransaction..isActive()){
entitiyManager.getTransaction.rollback();
}
throw new SomeServiceExeption(e);
}
}

这个应用程序只有很少的测试,几乎没有测试任何东西,所以我试图用单元测试覆盖尽可能多的代码(将有一些更改提交到应用程序中,这将需要对遗留代码进行大量更改,这不在测试范围内)。我的问题是你如何对这样的代码进行单元测试。我有三个想法:

  1. 重构测试。我可以引入 DAO 层并将所有entityManager 在那里调用。但是没有测试的重构总是问题。
  2. 模拟 EntityManager。我用 EasyMock 尝试了几次,它有效并帮助我至少有一些代码覆盖率需要改变,但可能不是好的风格,因为你不应该不属于您的模拟 api。此外,准备 EntityManager 模拟需要大量时间和代码
  3. 不进行单元测试,而是使用 hsqldb 或 h2 进行集成测试和一些虚拟测试数据。那么这可能需要大部分工作和测试会很慢。我也想涵盖大部分业务逻辑,而不是数据访问。

最佳答案

我可能会首先添加一些集成测试并覆盖您想要重构的部分。然后,您可以继续重构更多可单独测试的独立单元。如果重构正确,您就可以独立于存储对您的业务逻辑进行单元测试。

进行一些集成测试总是一个好主意,所以这将是一个很好的起点。

无论如何,我不会重构没有被任何测试覆盖的代码。

关于java - 如何对旧的遗留应用程序进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782667/

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