`

使用工厂方法mock测试方法体内中new出来的对象

阅读更多

本文假设读者已了解mock的基本定义,基础使用场景。本文的mock框架采用jmock

1、mock经典测试场景

class ToTest {
     private Member m;
     public void test(Varible v){
          m.call();
          v.call();
     }
}


通过mock出一个m和v,并对其行为进行预测,就可以对ToTest.test()进行单元测试

2、本文关注的问题为以下使用场景

Class ToTestA{
     public int test(){
          SomeClass s = new SomeClass();
          s.call();
     }
}


这样的情况下,如何才能对ToTestA.test()进行有效的单元测试。
笔者碰到的情况不是这么简单,因为还涉及到将类名存储到数据库,然后进行反射拿到类的实例,但是问题和上述基本一致。

3、解决办法

构造一个factory,使用factory method构造对象。

Class Factory{
     public SomeClass build(){
          return new SomeClass();
     }
}


新的ToTestA实现

Class ToTestA{
     Factory f = new Factory();
     public int test(){
          SomeClass s = f.build();
          s.call();
     }
}


那么被测试的模型就成功转换为Class ToTest,能够满足mock的要求

 

4、评价

缺陷:需要先对源代码进行改造后才能继续重构,并且产生新的类
优势:在对主逻辑进行重构前可以写出能跑的测试用例

 

分享到:
评论

相关推荐

    基于python的mock测试数据练习

    Python 提供了一个强大的库——`unittest.mock`,用于模拟(mock)对象、方法和类,以便在测试中隔离依赖关系,专注于测试目标代码的功能。本练习主要关注如何使用 `unittest.mock` 进行mock测试数据。 一、Mock...

    mock 测试.pptx

    下面是 Mock 测试的详细介绍和 Fiddler AutoResponder 面板的使用方法。 什么是 Mock 测试? -------------------- Mock 测试是一种软件测试方法,旨在模拟一些难以构造或获取的对象,以便进行测试。在测试过程中...

    单元测试与 Mock 方法

    Mock方法则是单元测试中的一个重要工具,用于模拟复杂系统中的依赖关系,以便孤立地测试目标代码。在本篇文章中,我们将深入探讨单元测试与Mock方法的相关知识点。 首先,让我们理解单元测试的基本概念。单元测试是...

    16、使用Mock修复测试代码1

    标题中提到的“使用Mock修复测试代码1”指的是使用Mock对象来修复测试代码的第一个示例。在这个示例中,我们将使用Symfony 5框架中的PostFactory类来创建一个Post对象,并使用Mock对象来模拟PostFactory类的行为。 ...

    Go-Mockcounterfeiter-一个工具用于在Go中生成自容器类型安全的测试Mock对象

    这样,当我们测试一个需要依赖其他服务或组件的函数时,可以使用Mock对象替代真实的依赖,以便在隔离的环境中验证被测试代码的行为。 使用Mock counterfeiter,开发者无需手动编写Mock对象的大量样板代码,这极大地...

    JMOCKIT mock 静态方法 单元测试

    可以用来Mock JAVA代码中的静态方法

    0积分:Mock对象教程

    ### 使用Mock对象在Java单元测试中的重要性及实践 #### 引言 在软件开发过程中,单元测试作为确保代码质量的重要环节,其有效性往往受到多种因素的影响,尤其是当待测方法依赖于外部资源如网络、数据库或其他复杂...

    mock对象介绍

    **Mock对象**是一种在软件开发过程中用于单元测试的特殊类型的对象。它模拟了真实对象的行为,以便于在不依赖于真实环境的情况下测试代码。Mock对象通常用于以下几种情况: - 当真实对象具有不确定的行为时,例如...

    java单元测试 spring mock的使用

    在单元测试程序编写的时候,只需要继承WebTestCase类,并在setUp方法中调用WebTestCase的setUp方法,就可以直接引用MockHttpServletRequest、MockHttpServletResponse、ServletConfig、ServletConfig、...

    服务端Mock测试基础原理讲解

    通过使用Mock技术,可以创建一个虚拟的对象,它能够返回期望的数据,从而模拟特定的测试场景。Mock可以应用在客户端测试,也可以用在服务端测试中。 客户端测试中的Mock处理通常可以借助一些抓包工具,如Fiddler、...

    Mock在Python单元测试中的使用.pdf

    在Python的单元测试中,Mock是一个非常重要的工具,它允许我们模拟对象的行为,以便在测试过程中隔离被测试代码与其他系统的交互。Mock可以帮助我们避免在测试时产生不必要的副作用,提高测试速度和效率。以下是对...

    Python在测试中使用Mock的方法

    Python在测试中使用Mock的方法

    dotnet 单元测试 Mock 让一个对象继承多个接口.rar

    本资源包“dotnet 单元测试 Mock 让一个对象继承多个接口.rar”提供了关于如何在.NET中使用Mock进行单元测试,特别是当对象需要实现多个接口时的详细指南。 首先,Mock对象是在单元测试中用于替代真实依赖的对象,...

    Object-CMock objects for Objective-C在Objective-C中使用Mock对象的实践

    - 学习者可以通过本项目了解如何在Objective-C中使用Mock对象进行单元测试,提高代码的可测试性和可维护性。 - 开发团队可以将本项目作为指导,逐步引入Mock对象到他们的测试实践中,从而提高代码质量和开发效率。 -...

    Mock

    描述中的链接指向了一篇关于Mock的博客文章,虽然具体内容未给出,但可以推测文章可能涉及了如何使用Mock进行测试、Mock工具的介绍以及Mock在实际项目中的应用案例。 在IT行业中,Mock工具有很多,比如Java中的...

    使用PowerMock来Mock静态函数

    3. 创建Mock:在测试方法中,使用`PowerMockito.mockStatic(Class)`来模拟整个静态类,或者使用`PowerMockito.when(Class.method()).thenReturn(value)`来指定静态方法在特定条件下的返回值。 4. 执行测试:进行正常...

    googlemock库附使用教程

    在测试用例中,我们期望`calculate`方法在接收到5时返回10,然后在`MyClassWithDependency`的实例中使用这个模拟对象。 通过这样的方式,我们可以有效地对含有复杂依赖的代码进行单元测试,确保每个部分都按预期...

    junit单元测试及Mock应用,超详细的PPT实战应用

    通过使用Mockito,开发者可以指定Mock对象在接收到特定方法调用时返回什么值,或者验证方法是否被正确调用。Mockito的@Mock注解用于创建Mock对象,@When注解用于配置Mock对象的行为,@Verify注解则用于确认方法调用...

    单元测试MockBean和SpyBean的简单用法

    下面将详细介绍MockBean和SpyBean的使用方法及其在单元测试中的作用。 **MockBean** MockBean是Spring Boot提供的一个注解,用于在测试环境中注入模拟对象。在测试中,我们可能不希望真实的依赖项执行其实际行为,...

Global site tag (gtag.js) - Google Analytics