Java项目中如何使用MockJS生成测试数据
最近项目中需要使用测试数据,其实在JS前端项目中已经有比较好的开源工具mockjs作为生成测试数据的工具,因此我们可以直接拿来使用,Java自带有脚本执行引擎,mockjs作为标准js库,没有依赖什么其他的项目,因此可以直接使用脚本引擎来执行。
mockjs地址:http://mockjs.com/
从github上去下载即可
下载地址:https://raw.githubusercontent.com/nuysoft/Mock/refactoring/dist/mock-min.js
下载mockjs并放到工程的src/main/resources/js/下面。
然后编写工具类
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class MockJsUtils {
/**
* Javascript执行引擎
*/
public static final ScriptEngine MOCK_JS_ENGINE;
/**
* mockjs的资源路径
*/
private static final String MOCK_JS_PATH = "js/mock-min.js";
static {
MOCK_JS_ENGINE = new ScriptEngineManager().getEngineByName("js");
try (
InputStream mockJs = MockJsUtils.class.getClassLoader().getResourceAsStream(MOCK_JS_PATH);
InputStreamReader reader = new InputStreamReader(mockJs)
) {
MOCK_JS_ENGINE.eval(reader);
} catch (ScriptException | IOException e) {
log.error("执行MockJs错误", e);
}
}
public static String mock(String template) {
String result = StringUtils.trimToEmpty(template);
if (isJson(result)) {
try {
result = MOCK_JS_ENGINE.eval("JSON.stringify(Mock.mock(" + result + "))").toString();
} catch (ScriptException e) {
log.error("执行Mock.mock错误", e);
}
}
return result;
}
}
简单测试代码:
@Slf4j
public class MockJsUtilsTest {
@Test
public void test() {
String input = "{\n" +
" \"user|2\": [{\n" +
" 'name': '@cname', \n" +
" 'id|+1': 1\n" +
" }]\n" +
"}";
String output = MockJsUtils.mock(input);
log.info("output: {}", output);
}
}
测试输入:
{
"user|2": [{
'name': '@cname',
'id|+1': 1
}]
}
测试输出:
{"user":[{"name":"曹静","id":1},{"name":"董勇","id":2}]}