Junt4 动态代码测试 方便与java在线教程编写
import java.util.HashMap; import org.junit.runner.Description; import org.junit.runner.Result; import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunListener; public class Listener extends RunListener { public static long begin_mill; public static long end_mill; public static long test_begin_mill; public static long test_end_mill; public static HashMap<String, Boolean> test_map; @Override public void testAssumptionFailure(Failure failure) { // TODO Auto-generated method stub super.testAssumptionFailure(failure); } @Override public void testFailure(Failure failure) throws Exception { // TODO Auto-generated method stub super.testFailure(failure); Description description = failure.getDescription(); TestDescription text_doc = description.getAnnotation(TestDescription.class); String name = description.getMethodName(); System.out.println(this); test_map.put(name, false); // System.out.println("test " + name + "( " + text_doc.value() + " )" +"is failure"); } @Override public void testFinished(Description description) throws Exception { // TODO Auto-generated method stub super.testFinished(description); String name = description.getMethodName(); TestDescription text_doc = description.getAnnotation(TestDescription.class); Boolean value = test_map.get(name); if(value == null){ test_map.put(name, true); } System.out.println(this); // System.out.println("test " + name + "( " + text_doc.value() + " )" +"is finished"); } @Override public void testIgnored(Description description) throws Exception { // TODO Auto-generated method stub super.testIgnored(description); } @Override public void testRunFinished(Result result) throws Exception { // TODO Auto-generated method stub super.testRunFinished(result); // System.out.println("all time " + (end_mill - begin_mill)); } @Override public void testRunStarted(Description description) throws Exception { // TODO Auto-generated method stub super.testRunStarted(description); begin_mill = System.currentTimeMillis(); test_map = new HashMap<String, Boolean>(); } @Override public void testStarted(Description description) throws Exception { // TODO Auto-generated method stub super.testStarted(description); String name = description.getMethodName(); // System.out.println("test " + name + "is started"); } }
import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; @Target({METHOD}) @Retention(RUNTIME) public @interface TestDescription { String value(); }
public class Practice { public int sum(int a,int b){ return a + b; } } PracticeTest.java import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class PracticeTest { @Test @TestDescription("sum(1, 2) -> 3") public void test1() { Practice a = new Practice(); Assert.assertEquals(3,a.sum(1, 2)); } @Test @TestDescription("sum(1, 3) -> 4") public void test2() { Practice a = new Practice(); Assert.assertEquals(4,a.sum(1, 3)); } @Test @TestDescription("sum(2, 2) -> 4") public void test3() { Practice a = new Practice(); Assert.assertEquals(4,a.sum(2, 2)); } @Test @TestDescription("sum(2, 3) -> 4") public void test4() { Practice a = new Practice(); Assert.assertEquals(4,a.sum(2, 3)); } }
import java.util.Iterator; import java.util.Set; import org.junit.runner.JUnitCore; import org.junit.runner.Result; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub JUnitCore core = new org.junit.runner.JUnitCore(); core.addListener(new Listener()); Result result = core.run(PracticeTest.class); Set<String> set = Listener.test_map.keySet(); Iterator<String> it = set.iterator(); while(it.hasNext()){ String name = it.next(); boolean is_success = Listener.test_map.get(name); String is_success_str = is_success ? "success" : "failure"; System.out.println("test " + name + " : " + is_success_str ); } System.out.println(result.wasSuccessful()); } }