持续集成之路 —— Mock对象引起的测试失败

简介:         今天遇到了一个很奇怪的问题,纠结了好久。在和同事念叨这个问题时,突然想到了问题所在。        问题现象: 在一个Service的单元测试类中有八个测试用例,单独运行时都可以正常通过。

        今天遇到了一个很奇怪的问题,纠结了好久。在和同事念叨这个问题时,突然想到了问题所在。

        问题现象: 在一个Service的单元测试类中有八个测试用例,单独运行时都可以正常通过。可是一旦一起运行时,总是会有固定的两个测试失败。

        问题原因:有一个测试用例mock了Service依赖的一个Dao对象,之后的用例再使用这个Dao对象时,就使用了mock,而不是Spring初始化的Instance.

        解决方法:在测试用例结束,重新将Spring初始化Dao对象set给Service对象,具体代码:

public class ReportServiceTest {
    //被测试的Service,由Spring初始化
    @Autowired
    private UserService userService;
    //Service依赖的Dao,由Spring初始化
    @Autowired
    private UserDao userDao;

    @Test
    @DatabaseSetup("dataset.xml") //测试数据集
    public void testGetManager(){
        //创建mock对象
        UserDao mockUserDao = mock(UserDao.class);
	//设置mock的Dao要模拟的操作
        when(...).thenReturn(..);
        //替换依赖
        ((UserServiceImpl)userService).setUserDao(mockUserDao);
        
        //具体测试代码
        ……
        
	//将mock的dao替换掉
        ((UserServiceImpl)userService).setUserDao(userDao);
    }
}


       除了上面的方法,还可以通过设定用例的执行顺序解决上面的问题。但是这个方法还是具有一定的危险性,一定要保证使用mock对象的测试用例最后执行,并且所有使用mock对象的用例之间要安排好执行顺序。关于如何指定测试用例的执行顺序,可以参考下面的文章:

Understanding JUnit method order execution
JUnit test method ordering
Ordered testcases execution in junit 4



目录
相关文章
|
26天前
|
数据管理 测试技术 持续交付
深入理解软件测试中的持续集成与持续部署
在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)是提升开发效率、保障产品质量的关键环节。本文将深入探讨CI/CD的概念、实施策略及其在软件测试中的作用,旨在为读者揭示如何通过有效的自动化流程来优化测试活动,减少人为错误,并实现快速反馈和迭代。文章还将讨论面临的挑战和可能的解决方案,以期帮助团队构建更加健壮的开发和测试环境。
|
1月前
|
敏捷开发 运维 测试技术
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第18天】 随着敏捷开发和DevOps文化的普及,持续集成(CI)已成为软件开发过程中不可或缺的组成部分。本文将深入探讨自动化测试在持续集成环境中的重要性,分析其如何提高软件交付速度、保障质量并减少人工干预。通过对现代软件工程实践中自动化测试策略的剖析,揭示了其在维护高效率和高质量软件产品中的核心地位。
30 7
|
1月前
|
敏捷开发 监控 Devops
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第15天】 本文旨在探讨自动化测试作为软件开发过程中不可或缺的一环,尤其在持续集成(CI)环境中的显著影响。通过深入分析自动化测试的实施策略和最佳实践,文章揭示了如何有效提升软件交付速度和质量。文中不仅讨论了自动化测试的基本概念和框架选择,还详细阐述了其在CI流程中的关键步骤及潜在挑战,并提出了相应的解决方案。
19 4
|
1月前
|
敏捷开发 测试技术 持续交付
探索自动化测试在持续集成环境中的关键作用
【2月更文挑战第15天】 随着敏捷开发和持续集成(CI)实践的普及,自动化测试已成为确保软件质量和加速产品上市速度的核心环节。本文将深入探讨自动化测试在持续集成环境中的重要性,分析其如何提高测试效率,减少人工干预的错误,并实现快速反馈循环。通过案例分析和最佳实践分享,我们将揭示自动化测试策略对提升软件开发流程的影响,以及如何有效地将其整合到现代软件生命周期管理中。
|
4天前
|
分布式计算 Hadoop 测试技术
Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
【4月更文挑战第5天】Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
28 8
|
24天前
|
存储 监控 测试技术
【软件设计师备考 专题 】系统集成测试的准备和执行
【软件设计师备考 专题 】系统集成测试的准备和执行
51 0
|
28天前
|
敏捷开发 供应链 测试技术
深入理解与应用软件测试中的Mock技术
【2月更文挑战第30天】 在现代软件开发过程中,单元测试是保证代码质量的重要手段。然而,对于高度依赖外部系统或服务的应用来说,传统的单元测试方法往往难以实施。Mock技术应运而生,它通过模拟外部依赖的响应,使开发者可以在隔离的环境中测试目标代码。本文将探讨Mock技术的概念、应用场景以及如何在软件测试中有效地使用Mock对象,以增强测试的灵活性和可靠性。
|
29天前
|
敏捷开发 监控 Devops
深入理解软件测试中的持续集成与持续部署(CI/CD)
【2月更文挑战第30天】 在快速发展的软件开发周期中,持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)已成为确保产品质量和加快交付速度的重要实践。本文旨在探讨CI/CD在软件测试领域中的应用与挑战,解析其对测试流程、自动化及团队协作的影响,并分享最佳实践案例。通过深入了解CI/CD,测试人员可以更好地适应敏捷开发模式,提高测试效率,降低发布风险。
23 1
|
1月前
|
敏捷开发 Devops 测试技术
探索自动化测试在持续集成中的关键作用
【2月更文挑战第25天】 随着敏捷开发模式的普及,持续集成(CI)已成为软件开发流程不可或缺的一部分。本文将探讨自动化测试在持续集成环境中的重要性及其如何提升软件交付的速度和质量。通过分析自动化测试的优势、实施策略以及面临的挑战,我们旨在为读者提供深入理解,并指导实践中的应用。
10 3
|
1月前
|
敏捷开发 监控 数据管理
探索自动化测试在持续集成环境中的关键角色
【2月更文挑战第24天】 在当今软件开发的快节奏环境中,自动化测试不再是一个选择,而是确保产品质量和加速市场交付的必要条件。本文将深入探讨自动化测试在持续集成(CI)环境中的重要性,分析其如何提高测试效率、降低错误率,并最终促进开发流程的持续改进。我们将通过具体的案例研究和最佳实践,揭示自动化测试策略的关键要素,以及如何在CI流程中有效集成自动化测试。