2009-06-10 5 views
16

私は、テスト実行リスナーを使用してSpring、Logging、JNDIなどの一般的な構成を設定し、サブクラスによって継承されるいくつかの基本テストクラスを用意しています。これは、テストコードを実行できるようになる前に、jndiとロギングサービスを確保することを心配することなく、テストがコードを実行できるようにするためです。RunnableメソッドがありませんBase Testクラスからエラーが発生しました

intellijを使用し、プロジェクトベースから「すべてのテストを実行」を呼び出すと、IDEはベーステストクラスを単体テストとして実行しようとし、「実行可能メソッドなし」エラーを表示します。

私は基本クラスに空の実行可能メソッドを置くことができますが、私はいくつかのものが良いアイデアを持っていることを期待していました。

基底クラスは次のとおりです。

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = { 
      "classpath:spring-jndi.xml" 
    }) 
    @TestExecutionListeners({ 
      Log4JSetupListener.class, 
      JndiSetupListener.class, 
      DependencyInjectionTestExecutionListener.class, 
      DirtiesContextTestExecutionListener.class, 
      TransactionalTestExecutionListener.class 
    }) 
    public class SpringAppTestCase extends Assert implements ApplicationContextAware { 

     protected JndiTemplate jndiTemplate = new JndiTemplate(); 

     @Autowired 
     protected JdbcTemplate jdbcTemplate; 

     protected ApplicationContext applicationContext; 

     public void setApplicationContext(ApplicationContext ac) { 
      this.applicationContext = ac; 
     } 

    // 
    // @Test 
    // public void doit(){ 
    //  // this would prevent blow up but 
    // all subclass tests would run an extra method 
    // } 

     protected Logger log = Logger.getLogger(getClass().getName()); 

} 

エラー:

java.lang.Exception: No runnable methods 
    at org.junit.internal.runners.MethodValidator.validateInstanceMethods(MethodValidator.java:32) 
    at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:43) 
    at org.junit.internal.runners.JUnit4ClassRunner.validate(JUnit4ClassRunner.java:36) 
    at org.junit.internal.runners.JUnit4ClassRunner.<init>(JUnit4ClassRunner.java:27) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:76) 
+0

実際には上記のコードにはテストはありません....エラーメッセージが正しいようにコメントアウトしましたか? –

+0

はい、コメント付きコード内のコメントで説明されました – gbegley

答えて

44

は、親クラスabstractを作るか、それは、そのようなことはTestまたはTestCaseで終わらないよう名前を変更します。

+1

ありがとう!私は "Test"で始まるクラスを持っていましたが、それは同じ問題を引き起こしました。 – tttppp

+0

ありがとう!クラステストではなく、Testで始まる名前のクラスがあり、同じエラーメッセージが表示されるという点を除いて、ほとんど同じ問題がありました。 – bluttringer

+2

"Test"をクラス名から取り出しても、私にとってはうまくいかなかった。しかし、 "抽象的な"を追加しました。 –

1

私は同じ問題がありました。私はTestメソッドなしでテストしていました。

@Test 
public void setupTest() { 
} 

上記の方法で問題が解決されました。

+0

この空のテストは、何らかのサブクラスがそれを継承するので何回でもx回実行されます(理由はありません)。受け入れられた答えは、2つのより良い選択肢を与えます。 –

関連する問題