错误如下:
java.lang.Exception:No tests found matching [{ExactMatcher:fDisplayName=testSelectByPrimaryKey], {ExactMatcher:fDisplayName=testSelectByPrimaryKey(com.dao.UserMapperTest)], {LeadingIdentifierMatcher:fClassName=com.dao.UserMapperTest,fLeadingIdentifier=testSelectByPrimaryKey]] from org.junit.internal.requests.ClassRequest@27fa135a
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:40)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:77)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:68)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
今天在使用mybatis的逆向工程中测试mapper方法时报了如上的错误,大概的意思是我需要测试的方法并没有找到,报了一个initializationerror,这属于初始化的错误了,测试方法没有加载成功。由于我的测试方法均由工具生成,开始并没有太多关注。很奇怪另外一个测试类可以成功运行,但是第二个测试类报错,仔细对比了两个测试类的区别,发现我第一个测试类继承了TestCase,第二个测试类没有,在当我把第一个测试类的继承关系删除也报了如上测错误。之后查看网上资料大概了解了junit实现测试有两种方式。
使用@Test与@Brfore等注解方式
public class TestEx {
@Before
public void setUp() {
//
}
@Test
public void test() {
//
}
}
此类方式需要对所测试方法添加@Test,对需要在测试方法之前执行的方法添加@Before。
注意:@Before注解的方法必须为public,不能为private,protect,default。
如果为protected,default也会报上类的错误,private会报如下错误:java.lang.Exception: Method setUp() should be public at。从这可以看出来@Before注解的方法仅能被public修饰。
测试类继承TestCase
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import junit.framework.TestCase;
public class TestEx extends TestCase{
public void setUp() {
//
}
public void test() {
//
}
}
对于继承TestCase的测试类来说,是根据方法名来区别,测试方法的形式需要为testXXX,在测试方法之前执行的方法名为setup,而且setup方法只能被public修饰。
测试方法名不正确报错:
java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=tes], {ExactMatcher:fDisplayName=tes(com.dao.TestEx)], {LeadingIdentifierMatcher:fClassName=com.dao.TestEx,fLeadingIdentifier=tes]] from org.junit.internal.requests.ClassRequest@27d6c5e0
setup方法名不正确报错:
java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=setp], {ExactMatcher:fDisplayName=setp(com.dao.TestEx)], {LeadingIdentifierMatcher:fClassName=com.dao.TestEx,fLeadingIdentifier=setp]] from org.junit.internal.requests.ClassRequest@2d98a335
因此对于继承TestCase的测试类来说,setup的修饰符与方法名的正确性很重要。
我的问题在于我的测试类中@Before注解方法被protected修饰,改为public即可,junit中规定@Before注解方法只能被public修饰。