2.5单元测试示例
单元测试常见问题
数据源不独立,常因为新增加的测试用例,影响到以前的测试用例
期待结果写在测试代码中,耦合度高
每次增加测试用例,都需要更改测试代码,测试代码不可复用
本小节中,我们将介绍一种优雅的测试用例方式
我们会使用一个json文件囊括测试用例所需的所有入参,依赖,期待结果,期待异常。从而没次增加测试用例,只需要向json文件中添加数据即可,无需改动代码
每一个方法拥有独立的数据源
实体类
com.moluo.example.util.TestCase
package com.inspur.securityhubapi.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* 测试用例类
* <p>
* 使用此类,json结构体需要满足如下格式
* <pre>
* {
* "方法名": [
* {
* "description": "",
* "args": {
* JsonObject对象
* },
* "relyMethodReturnMocks": {
* JsonArray对象
* },
* "exceptSuccessResults": {
* JsonArray对象
* },
* "exceptFailureResults": {
* JsonArray对象
* }
* }
* ]
* }
* </pre>
*
* @author moluo
* @since 2020/5/22
*/
public class TestCase {
private String description;
private JSONObject args;
private JSONObject relyMethodReturnMocks;
private JSONObject exceptSuccessResults;
private JSONObject exceptFailureResults;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public <T> T getArg(String key, Class<T> clazz) {
return args.getObject(key, clazz);
}
public void setArgs(JSONObject args) {
this.args = args;
}
public void addArg(String key, JSONObject jsonObject) {
args.put(key, jsonObject);
}
public <T> T getRelyMethodReturnMock(String key, int index, Class<T> clazz) {
return relyMethodReturnMocks.getJSONArray(key).getObject(index, clazz);
}
public void setRelyMethodReturnMocks(JSONObject relyMethodReturnMocks) {
this.relyMethodReturnMocks = relyMethodReturnMocks;
}
public void addRelyMethodReturnMock(String key, JSONArray values) {
relyMethodReturnMocks.put(key, values);
}
public <T> T getExceptSuccessResult(String key, int index, Class<T> clazz) {
return exceptSuccessResults.getJSONArray(key).getObject(index, clazz);
}
public void setExceptSuccessResults(JSONObject exceptSuccessResults) {
this.exceptSuccessResults = exceptSuccessResults;
}
public void addExceptSuccessResult(String key, JSONArray values) {
exceptSuccessResults.put(key, values);
}
public Boolean hasExceptSuccessResults() {
return !exceptSuccessResults.isEmpty();
}
public <T> T getExceptFailureResult(String key, int index, Class<T> clazz) {
return exceptFailureResults.getJSONArray(key).getObject(index, clazz);
}
public void setExceptFailureResults(JSONObject exceptFailureResults) {
this.exceptFailureResults = exceptFailureResults;
}
public void addExceptFailureResult(String key, JSONArray values) {
exceptFailureResults.put(key, values);
}
public Boolean hasExceptFailureResults() {
return !exceptFailureResults.isEmpty();
}
}需要的工具类
com.moluo.example.util.JsonUtils
com.moluo.example.util.TestCaseUtils
示例json文件
resources/mock/json/mq/CsfMessageListenerTest.json
示例
Last updated
Was this helpful?