Junit 测试框架中 Assert 类就是断言工具类,主要验证单元测试中实际数据对象与 期望数据对象一致。在调用被测方法时,需要对返回值和异常进行验证;在验证方 法调用时,也需要对捕获的参数值进行验证。
验证数据对象空值 1) 验证数据对象为空 通过 Junit 提供的 Assert.assertNull 方法验证数据对象为空。 2) 验证数据对象非空 通过 Junit 提供的 Assert.assertNotNull 方法验证数据对象非空。
验证数据对象布尔值 1) 验证数据对象为真 通过 Junit 提供的 Assert.assertTrue 方法验证数据对象为真。 2) 验证数据对象为假 通过 Junit 提供的 Assert.assertFalse 方法验证数据对象为假。
验证数据对象引用 在单元测试用例中,对于一些参数或返回值对象,不需要验证对象具体取值,只需 要验证对象引用是否一致。 1) 验证数据对象一致 Junit 提供的 Assert.assertSame 方法验证数据对象一致。 2) 验证数据对象不一致 Junit 提供的 Assert.assertNotSame 方法验证数据对象一致。
验证数据对象值 Junit 提供 Assert.assertEquals、Assert.assertNotEquals、Assert.assertArrayEquals 方法组,可以用来验证数据对象值是否相等。 1) 验证简单数据对象 对于简单数据对象(比如:基础类型、包装类型、实现了 equals 的数据类型……), 可以直接通过 Junit 的 Assert.assertEquals 和 Assert.assertNotEquals 方法组进行 验证。 2) 验证简单数组或集合对象 对于简单数组对象(比如:基础类型、包装类型、实现了 equals 的数据类型……), 可以直接通过 Junit 的 Assert.assertArrayEquals 方法组进行验证。对于简单集合对 象,也可以通过 Assert.assertEquals 方法验证。 3) 验证复杂数据对象 对于复杂的 JavaBean 数据对象,需要验证 JavaBean 数据对象的每一个属性字段。 4) 验证复杂数组或集合对象 对于复杂的 JavaBean 数组和集合对象,需要先展开数组和集合对象中每一个 JavaBean 数据对象,然后验证 JavaBean 数据对象的每一个属性字段。 5) 通过序列化验证数据对象 如上一节例子所示,当数据对象过于复杂时,如果采用 Assert.assertEquals 依次验 证每个 JavaBean 对象、验证每一个属性字段,测试用例的代码量将会非常庞大。 这里,推荐使用序列化手段简化数据对象的验证,比如利用 JSON.toJSONString 方 法把复杂的数据对象转化为字符串,然后再使用 Assert.assertEquals 方法进行验证 字符串。但是,序列化值必须具备有序性、一致性和可读性。 通常使用 JSON.toJSONString 方法把 Map 对象转化为字符串,其中 key-value 的顺 序具有不确定性,无法用于验证两个对象是否一致。这里,JSON 提供序列化选项 SerializerFeature.MapSortField(映射排序字段),可以用于保证序列化后的 key�value 的有序性。 6) 验证数据对象私有属性字段 有时候,单元测试用例需要对复杂对象的私有属性字段进行验证。而 PowerMockito 提供的 Whitebox.getInternalState 方法,获取轻松地获取到私有属性字段值。
验证异常对象内容 异常作为 Java 语言的重要特性,是 Java 语言健壮性的重要体现。捕获并验证异常 数据内容,也是测试用例的一种。 1) 通过@Test 注解验证异常对象 Junit 的注解@Test 提供了一个 expected 属性,可以指定一个期望的异常类型,用 来捕获并验证异常。但是,这种方式只能验证异常类型,并不能验证异常原因和消 息。 2) 通过@Rule 注解验证异常对象 如果想要验证异常原因和消息,就需求采用@Rule 注解定义 ExpectedException 对 象,然后在测试方法的前面声明要捕获的异常类型、原因和消息。 3) 通过 Assert.assertThrows 验证异常对象 在最新版的 JUnit 中,提供了一个更为简洁的异常验证方式——Assert.assertThrows 方法。
以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。