2013-10-11 41 views
1

我的單元測試使用枚舉作爲數據點(請參閱JUnit Theories)。JUnit&警告通過公共API導出非公共類型的警告

此枚舉只用於測試,因此我更喜歡它被封裝和一個私人嵌套類。 JUnit要求測試方法公開。測試方法有私人枚舉作爲參數:

@RunWith(Theories.class) 
class ExampleTest { 
    private enum Lists { 
     EMPTY, 
     SINGLE_ELEMENT, 
     OTHER_ELEMENT, 
     TWO_ELEMENTS; 

     public Object createElements() { 
      // Imagine createElements being abstract and 
      // implemented in each enum constant. 
     } 
    } 

    @DataPoints 
    public static final Lists[] ALL_LISTS = Lists.values(); 

    private List<Object> tested; 

    @Theory 
    public void add_sizeIncreased(Lists elementsToAdd) { 
     int oldSize = tested.size(); 
     int nElementsAdded = elementsToAdd.size(); 

     tested.addAll(elementsToAdd); 

     assertThat(tested.size(), is(equalTo(oldSize + nElementsAdded)); 
    } 
} 

這正好導致警告/提示:「導出非公開型通過公共API」(Netbeans中至少)。

解決此問題的正確方法是什麼?

  • 我還沒有找到'SuppressWarnings'註釋;
  • 對相關SO問題的解答Sachin,Aselivanovuser329820認爲警告是正確的,並且您應該公開這些類型。 unittest與這些其他情況的不同之處在於,測試的公共方法不會被其他代碼調用。
    (我承認測試框架稱他們,但我希望你看到我的觀點)。
  • 據我所知,JUnit不會調用私有測試方法,事實上,當它看到用'Theory'註解的私有方法時會引發錯誤。

回答

0

兩個建議:

  1. 只是要枚舉公衆。既然它在測試代碼中,它不會被導出到你的jar/war中,所以沒什麼大不了的。

  2. 在您的測試方法中接受Object而不是Lists並投射。