junitテストエラーjava.lang.Exception:No tests found matching反省とまとめ

3336 ワード

エラーは次のとおりです.
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を報告しました.これは初期化のエラーで、テストメソッドはロードに成功しませんでした.私のテスト方法はすべてツールによって生成されたので、最初はあまり注目していませんでした.他のテストクラスが正常に実行できるのはおかしいですが、2番目のテストクラスが間違っていて、2つのテストクラスの違いをよく比較してみると、私の最初のテストクラスはTestCaseを継承していることがわかりました.2番目のテストクラスはありません.私が最初のテストクラスの継承関係を削除したときも、上記のテストエラーを報告しました.その後、ネット上の資料を見てjunit実装テストには2つの方法があることがわかりました.

方法1:


@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でしか修飾できないことが分かる.

方法2:


テストクラス継承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によってしか修飾できないと規定されています.