2013-03-13 23 views
2

我正在使用JUnit 4.11,擴展了BlockJUnit4ClassRunner並使用了自定義註釋。 如果註釋符合某個參數,測試將不會運行。關於junit的「no runnable methods」(自定義註釋和所有測試過濾)

這工作正常,除了一個類的所有測試過濾出來,但自定義測試運行器。

如在這篇文章中描述的基本上恰好:JUnit4 skip test(s) according to custom java annotations

我試圖在這篇文章中提到的解決方法:JUnit: how to avoid "no runnable methods" in test utils classes

如果I引入僞測試,使得存在至少一個測試,那將總是運行,一切都很好。如果所有測試都沒有運行,因爲它們都有註釋,我會得到「No runnable methods」異常。

我可以接受解決方法,但應該有更好的方法。 我很感激任何指針或解釋我做錯了什麼或如何改善這種情況。

+0

我還沒有嘗試過它們,但是如果使用JUnit規則實現它,它可能會工作嗎? http://cwd.dhemery.com/2010/12/junit-rules/ – Zutty 2013-03-13 11:12:30

+0

@祖蒂,我會看看,謝謝。我也看到,junit-ext(ensions)會有一個恰當的行爲,不幸的是,它們有點過時,並沒有在maven中(因此沒有選擇項目)。 – nheid 2013-03-13 12:50:25

回答

5

你得到這個錯誤是由於validateInstanceMethods因爲computeTestMethods()進行的驗證返回一個空列表:

protected void validateInstanceMethods(List<Throwable> errors) { 
     validatePublicVoidNoArgMethods(After.class, false, errors); 
     validatePublicVoidNoArgMethods(Before.class, false, errors); 
     validateTestMethods(errors); 

     if (computeTestMethods().size() == 0) 
      errors.add(new Exception("No runnable methods")); 
    } 

您可以覆蓋此方法並刪除尺寸驗證或添加自己的驗證,將考慮考慮註釋的測試方法。
請注意,此方法爲@Deprecated,將在未來的版本中刪除。

+0

非常感謝您的回覆,您絕對正確。 – nheid 2013-03-13 12:48:28