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:
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:
テストクラス継承TestCaseimport 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によってしか修飾できないと規定されています.
public class TestEx {
@Before
public void setUp() {
//
}
@Test
public void test() {
//
}
}
テストクラス継承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によってしか修飾できないと規定されています.