获取JUnit的执行结果
junit执行之后会有一个结果展示,下面就来看一下怎么获取这些结果并将其存储为一个对象
junit代码如下:
package test; import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; public class JunitDemo { @Before
public void bofore() {
System.out.println("bofore");
} @After
public void after() {
System.out.println("after");
} @Test
public void test1() {
System.out.println("test1");
Assert.assertEquals(1, 2);
} @Test
public void test2() {
System.out.println("test2");
Assert.assertEquals(1, 1);
} @Test
public void test3() {
System.out.println("test3");
Integer.valueOf("aede21");
} }

首先先写两个类,分别是结果对象和结果中的方法执行结果对象
结果记录类:
package test;
import java.util.List;
public class MyResultRecorder {
String script_name;
List<MethodInfo> list;
Boolean result;
public String getScript_name() {
return script_name;
}
public void setScript_name(String script_name) {
this.script_name = script_name;
}
public List<MethodInfo> getList() {
return list;
}
public void setList(List<MethodInfo> list) {
this.list = list;
}
public Boolean getResult() {
return result;
}
public void setResult(Boolean result) {
this.result = result;
}
@Override
public String toString() {
return "MyResultRecorder [script_name=" + script_name + ", list=" + list + ", result=" + result + "]";
}
}
记录中的方法:
package test;
public class MethodInfo {
String method_name;
Boolean result;
String error_msg;
public String getMethod_name() {
return method_name;
}
public void setMethod_name(String method_name) {
this.method_name = method_name;
}
public Boolean getResult() {
return result;
}
public void setResult(Boolean result) {
this.result = result;
}
public String getError_msg() {
return error_msg;
}
public void setError_msg(String error_msg) {
this.error_msg = error_msg;
}
@Override
public String toString() {
return "MethodInfo [method_name=" + method_name + ", result=" + result + ", error_msg=" + error_msg + "]";
}
}
然后,需要写一个监听器ExecutionListener,继承junit的RunListener,并在监听时给对象赋值
package test; import java.util.ArrayList;
import java.util.List; import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener; public class ExecutionListener extends RunListener {
MyResultRecorder recorder;
MethodInfo methodInfo;
List<MethodInfo> list; public ExecutionListener() {
this.list = new ArrayList<>();
} public void testRunStarted(Description description) throws Exception {
System.out.println("--------- START ----------");
recorder = new MyResultRecorder();
} public void testRunFinished(Result result) throws Exception {
recorder.setResult(result.wasSuccessful());
recorder.setList(list);
System.out.println("--------- END ----------");
System.out.println("执行结果 : " + result.wasSuccessful());
System.out.println("执行时间 : " + result.getRunTime());
System.out.println("执行数量 : " + result.getRunCount());
System.out.println("失败数量 : " + result.getFailureCount());
System.out.println("忽略数量 : " + result.getIgnoreCount());
} public void testStarted(Description description) throws Exception {
recorder.setScript_name(description.getClassName());
System.out.println(description.getMethodName() + " begin");
methodInfo = new MethodInfo();
methodInfo.setMethod_name(description.getMethodName());
} public void testFinished(Description description) throws Exception {
System.out.println(description.getMethodName() + " end");
if (methodInfo.getError_msg() == null)
methodInfo.setResult(true);
list.add(methodInfo);
} public void testFailure(Failure failure) throws Exception {
System.out.println("Execution of test case failed : " + failure.getMessage());
methodInfo.setResult(false);
methodInfo.setError_msg(failure.getMessage());
} public void testIgnored(Description description) throws Exception { }
}
写一个junit的类,做多个执行的处理
package test; import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; public class JunitDemo2 {
@Before
public void bofore() {
System.out.println("bofore");
} @After
public void after() {
System.out.println("after");
} @Test
public void test2() {
System.out.println("test2");
Assert.assertEquals(1, 1);
} }
最后,写一个执行类,看一下执行的效果
package test;
import org.junit.runner.JUnitCore;
public class Execute {
public static void main(String[] args) {
run(JunitDemo.class, JunitDemo2.class);
}
private static void run(Class<?>... classes) {
for (Class<?> clazz : classes) {
JUnitCore runner = new JUnitCore();
ExecutionListener listener = new ExecutionListener();
runner.addListener(listener);
runner.run(clazz);
MyResultRecorder recorder = listener.recorder;
System.out.println(recorder);
}
}
}
执行的结果如下:
--------- START ----------
test1 begin
bofore
test1
after
Execution of test case failed : expected:<1> but was:<2>
test1 end
test2 begin
bofore
test2
after
test2 end
test3 begin
bofore
test3
after
Execution of test case failed : For input string: "aede21"
test3 end
--------- END ----------
执行结果 : false
执行时间 : 11
执行数量 : 3
失败数量 : 2
忽略数量 : 0
MyResultRecorder [script_name=test.JunitDemo, list=[MethodInfo [method_name=test1, result=false, error_msg=expected:<1> but was:<2>], MethodInfo [method_name=test2, result=true, error_msg=null], MethodInfo [method_name=test3, result=false, error_msg=For input string: "aede21"]], result=false]
--------- START ----------
test2 begin
bofore
test2
after
test2 end
--------- END ----------
执行结果 : true
执行时间 : 1
执行数量 : 1
失败数量 : 0
忽略数量 : 0
MyResultRecorder [script_name=test.JunitDemo2, list=[MethodInfo [method_name=test2, result=true, error_msg=null]], result=true]
这样就通过重写junit的监听,将junit的执行结果,存储到一个对象当中
获取JUnit的执行结果的更多相关文章
- EXPLAIN PLAN获取SQL语句执行计划
一.获取SQL语句执行计划的方式 1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 2. 启用执行计划跟踪功能,即autotrace功能 3 ...
- 通过DeveloperApi获取spark程序执行进度及异常
在应用spark时,经常要获取任务的执行进度,可以参照jobProgressListener的设计来完成该功能. 以下代码仅供参考,欢迎交流. 效果显示: 代码: package org.apache ...
- 通过10046 event来获取真实的执行计划
获取SQL执行计划的方式有很多,但是某些时候获取的SQL执行计划并不是准确的,只有在SQL真实执行之后获取到的SQL PLAN才是真实准确的,其他方式(如,explain plan)获取到的执行计划都 ...
- iOS:Gif动画功能(显示gif动画、获取gif动画时长、获取gif动画执行次数)
一.简单介绍 gif动画是iOS开发中很常用的一个功能,有的是为了显示加载视频的过程,更多的是为了显示一个结果状态(动画更直观). 那么如何执行gif动画,方法有很多.(这里只写一下方法三,前两种之前 ...
- Yii2获取当前程序执行的sql语句
1.Yii2获取当前程序执行的sql语句: $query = model::find(); $dataProvider = new ActiveDataProvider([ ...
- C++ 获取当前正在执行的函数的相关信息(转)
该功能用在日志打印中 原文地址:C++ 获取当前正在执行的函数的相关信息
- [Junit] 测试方法执行顺序
Junit 4.11里增加了指定测试方法执行顺序的特性测试类的执行顺序可通过对测试类添加注解 “@FixMethodOrder(value)” 来指定,其中value 为执行顺序三种执行顺序可供选择: ...
- 获取当前正在执行的Javascript脚本文件的路径
获取当前JavaScript脚本文件的路径,在特定场景下可能需要,比如写模块加载器,或者进行日志记录.下面这段脚本适用于所有浏览器来获取正在执行js文件的路径,但是该方法只适用于脚本加载过程中执行的情 ...
- C# 与Sql server 获取数据和执行命令
C#数据库命封装在 System.Data.SqlClient 之中: 从使用的数据库中获取连接串connectionstring:"server=xx.xxx.xx.xx,xxxx: da ...
随机推荐
- [SinGuLaRiTy] 组合数学
[SinGuLaRiTy-1005] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved . 加法原理 设事件A有m种产生方式,事件B有n种产生方式 ...
- (一) 这就是所谓的Node.js------单线程,非阻塞,事件驱动
Node.js 第一天笔记(V1) 一:Node.js到底是从何而来 2008年的秋天,一个名叫做Ryan Dahl(罗伊・达尔)的年轻人在玩了几年服务器编程之后,越发感到服务器高并发性能的瓶颈是一个 ...
- 使用关系型数据库作为Redis落地的思路
Redis的持久化方式主要有2种:RDB和AOF,但各有不足,同时Redis没有SQL支持,Redis本身提供的命令不足以实现大多数SQL查询需求,对后期运营的分析需求支撑不足.此外,对于游戏来说,活 ...
- 让TextView里面的文字逐个显示的动画效果实现(1)
最近使用TextView时想要实现里面的文字逐个显示的动画效果,就如同打字一样. 主要实现思想:新建一个TextView的派生类,先将要逐个显示的字符串保存变量 mOriginalStr 中,然后启动 ...
- 1164: 零起点学算法71——C语言合法标识符(存在问题)
1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 10 ...
- Kubernetes环境下的各种调试方法
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文介绍在Kubernetes环境下的调试方法,希望对读者有用.如果关 ...
- web 项目中a标签传值(中文)到后台的乱码问题
web 项目中a标签传值(中文)到后台的乱码问题 jsp页面中的a标签: .............. <c:forEach items="${sellerList }" v ...
- [编织消息框架][JAVA核心技术]动态代理应用8-IRpcReceive实现
private static Map<Short, Map<Byte, Method>> RECEIVE_METHOD_INFO = new HashMap<>() ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- ABPZero中的Name和SurName处理
使用ABPzero的朋友们都知道,User表中有Name和Surname两个字段,这两个字段对于国内的用户来说相当的不友好. 我们在尝试了很多的方法之后,发现无法完美将他们干掉. 所以尝试使用了一个比 ...