IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> JAVA单元测试用例——待续 -> 正文阅读

[开发测试]JAVA单元测试用例——待续

JAVA单元测试用例编写



??单元测试通常不依赖第三方组件(比如数据库),如果遇到了这些需要依赖第三方的情况,可以使用mock技术,模拟想要的情况。Java中mock的对象主要是Java方法和Java类。PowerMock在Mockito的基础上扩展而来,支持Mockito的操作,是一个扩展了多个mock框架的、功能更加强大的框架。它使用一个自定义类加载器和字节码操作来模拟public方法(大多数情况)、static静态方法、构造方法、final类和方法、private私有方法、enum枚举类、去除静态初始化器等。

一、常用注解

  • @RunWith(PowerMockRunner.class)

指定JUnit 使用 PowerMock 框架中的单元测试运行器来做Object的Mock工作,在执行时,再交给delegate的runner去执行。

  • @PowerMockIgnore({}, {}, …)

默认情况下,PowerMock会用自己的类加载器去加载所有的类,除了system class(java.lang等目录下的类),使用PowerMockIgnore声明的类PowerMock也不会加载。

  • @PrepareForTest

模拟final类、final方法或static静态方法时,需要添加@PrepareForTest注解,并指定方法所在的类。如果需要指定多个类,在{}中添加多个类并用逗号隔开即可。

  • @Before、@BeforeClass、@After、@AfterClass
  • @BeforeClass(@BeforeAll): 在测试类中只会被执行一次,注解在静态方法上。
  • @Before(@BeforeEach):每个测试方法均会执行一次,注解在非静态方法上。
  • 单元测试用例执行顺序: @BeforeClass -> @Before -> @Test -> @After -> @AfterClass。
  • 测试方法的调用顺序:@Before -> @Test -> @After。
  • @Mock
  • 创建一个Mock实例,其所有属性均被置0或null,Mock函数默认不执行,有返回值的返回null、空集合或被对象类型包装的内置类型(Integer等)。
  • Mock对象会记住所有的交互,即对这个Mock对象做的操作都被记录下来,然后可以选择性验证(verify方法) 感兴趣的交互。
// 类
@Component
public class TClass {

    public String getMessage(String str) {
        System.out.println(str);
        return str + "!!!";
    }
}

// 测试
@Mock
private TClass tClass;

@Test
public void testTClass() {
    tClass.getMessage("ho");
    // 验证正确,因为该行为被记录
    Mockito.verify(tClass).getMessage("ho");
}
  • @Spy
  • 创建一个没有Mock的实例,所有成员方法默认按照原方法的逻辑执行,直到被Mock返回某个具体的值为止。
  • @Spy注解的变量需要被初始化,否则执行时会抛出异常。
  • 如果发现@Spy注解修饰的变量是 null,会自动调用类的无参构造函数(必须有)来初始化,因此 new XXX() 可写可不写。
  • 对Spy变量打桩时,使用 when 去设置模拟值,真实方法逻辑依然会执行,但模拟了返回结果。
  • @InjectMocks

创建一个可以调用真实方法逻辑的实例,并注入所有用@Mock或@Spy注解创建的实例。

  • @Captor

字段级别创建参数捕获器,在测试方法启动前(在@Before修饰的方法中),必须调用MockitoAnnotations.openMocks(this)进行初始化。

二、常用方法

2.1 Mockito类

org.mockito.Mockito类中提供了大量的静态方法,其中较多关键方法封装在静态类MockitoCore中。

2.1.1 mock和spy

  • Mockito.mock()
public static <T> T mock(Class<T> classToMock) {
        return mock(classToMock, withSettings());
}
// 最终在 MockitoCore 中实现
public static <T> T mock(Class<T> classToMock, MockSettings mockSettings) {
        return MOCKITO_CORE.mock(classToMock, mockSettings);
}
  • 通过给定类或接口构建对应的mock实例。
  • 对于非final类(接口、普通类等)的非final方法,不必使用@RunWith和@PrepareForTest注解,反之则相反。
  • spy()
// 模拟类
public static <T> T spy(Class<T> classToSpy) {
        return MOCKITO_CORE.mock(
                classToSpy, withSettings().useConstructor().defaultAnswer(CALLS_REAL_METHODS));
}

// 模拟方法
public static <T> T spy(T object) {
        return MOCKITO_CORE.mock(
                (Class<T>) object.getClass(),
                withSettings().spiedInstance(object).defaultAnswer(CALLS_REAL_METHODS));
}
  • 可以只模拟对象的部分方法,同时其它方法跟原来一样,callRealMethod()方法也能实现部分mock。
  • 通过模拟类的方式可直接调用静态方法
  • 通过when语句设置过的方法调用实际方法但返回模拟结果,没有通过when语句设置的方法调用原有方法并返回实际结果。
  • 通常结合doXXX()方法,只有使用doReturn()方法时不会调用实际方法。
  • spy对象可以视作被spy的对象的浅拷贝

2.1.2

  • when()

2.1.3

  • doCallRealMethod()

2.1.4 验证方法

  • verify()
  • times()

2.2 ArgumentMatchers参数匹配

2.3 OngoingStubbing打桩

111

2.4 Assert类

  • assertThrows()
public static <T extends Throwable> T assertThrows(Class<T> expectedThrowable, 
													ThrowingRunnable runnable) {}

允许使用异常类的超类型。

  • assertEquals()

参考文档

《Mockito中文文档》

《Mockito官网》

《Mockito英文文档》

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:41:58  更:2022-09-04 01:42:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:26:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码