项目中使用junit4.4,虽然一直在用,但对testcase 的执行细节却不大清楚,我做了一些例子来测试一下
JunitTest.java
public class JunitTest extends TestCase{
private Logger logger = Logger.getLogger(JunitTest.class);
public JunitTest(){
super("junit test");
logger.info("junit test contruct");
}
public void setUp(){
logger.info("setUp");
}
public void testMethod1(){
logger.info("method1");
}
public void testMethod2(){
logger.info("method2");
}
@Test
public void method3(){
logger.info("annotion method3");
}
private void testMethod4(){
logger.info("private method4");
}
@Test
private void testMethod5(){
// error Test method isn't public
logger.info("annotion private method5");
}
public void mthod6(){
logger.info("method6");
}
private void mthod7(){
logger.info("method6");
}
public void tearDown(){
logger.info("tear down");
}
}
日志输出:
01-13 10:58:44,439 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.<init>(JunitTest.java:15) junit test contruct
01-13 10:58:44,439 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.<init>(JunitTest.java:15) junit test contruct
01-13 10:58:44,455 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.setUp(JunitTest.java:18) setUp
01-13 10:58:44,455 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.testMethod1(JunitTest.java:21) method1
01-13 10:58:44,455 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.tearDown(JunitTest.java:45) tear down
01-13 10:58:44,455 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.setUp(JunitTest.java:18) setUp
01-13 10:58:44,455 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.testMethod2(JunitTest.java:24) method2
01-13 10:58:44,455 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.JunitTest.tearDown(JunitTest.java:45) tear down
junit执行结果
testMethod1 success;
testMethod2 success;
warning 这个什么错也没有,我又测试了一下 发现是 testMethod4 的问题
warning 这个报错了, Test Method isn't public: testMethod5
test 3 没有出现 ,难道junit4中方法必需要有 test前缀吗,
从日志分析:
JunitTest 执行了 两次 构造函数,这个原因还不知道,需要看具体的执行代码。
执行每个TestMethod 时 都会 执行一次setUp() 和 tearDown(); 应该是为method清理环境
还有 测试方法应该有 test 前缀 ,而且为public
乌龙了,确实是junit4的包,不过确实junit3的用法。
下面是 junit 4的用法;
public class Junittest4 {
private static Logger logger = Logger.getLogger(Junittest4.class);
@Before
public void before(){
logger.info("before setUp");
}
@After
public void after(){
logger.info("After teardown");
}
public void testMethod1(){
logger.info("no test annotion public method");
}
@Test
public void Method2(){
logger.info("test annotion public method");
}
@Ignore("not complete")
@Test
public void Method3(){
logger.info("test annotion private method");
}
@Test(timeout=5)
public void testMethod4() throws InterruptedException{
Thread.sleep(4);
logger.info("test annotion public has test method");
}
@Test(timeout=5)
public void testMethod5() throws InterruptedException{
Thread.sleep(5);
logger.info("test annotion public has test method");
}
@Test(timeout=5)
public void testMethod6() throws InterruptedException{
Thread.sleep(6);
logger.info("test annotion public has test method");
}
}
日志输出
01-13 11:45:50,502 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.before(Junittest4.java:13) before setUp
01-13 11:45:50,517 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.Method2(Junittest4.java:24) test annotion public method
01-13 11:45:50,517 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.after(Junittest4.java:17) After teardown
01-13 11:45:50,564 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.before(Junittest4.java:13) before setUp
01-13 11:45:50,580 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.testMethod4(Junittest4.java:34) test annotion public has test method
01-13 11:45:50,580 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.after(Junittest4.java:17) After teardown
01-13 11:45:50,580 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.before(Junittest4.java:13) before setUp
01-13 11:45:50,595 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.after(Junittest4.java:17) After teardown
01-13 11:45:50,595 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.before(Junittest4.java:13) before setUp
01-13 11:45:50,611 INFO test.com.hiksoft.prototype.modules.advancedtemplate.junittest.Junittest4.after(Junittest4.java:17) After teardown
测试结果
method2 suucess
method3 ignore
method4 success
method5 fail
method6 fail