junit测试错误java.lang.Exception: No tests found matching反思与小总结

错误如下:

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修饰。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值