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?