2011-05-11 125 views
2

我想弄清楚如何測試我正在處理的小型庫。以此簡化方法爲例:接受Class參數的測試方法

private int countMappableFields(Class<?> type) { 
    int mappableFields = 0; 
    Field[] fields = type.getFields(); 
    for (int i = 0; i < fields.length ; i++) { 
     if (FieldHelper.isMappable(fields[i])) 
      mappableFields++;    
    } 
    return mappableFields; 
} 

我應該在單獨的文件中定義幾個類並在所有測試中引用它們嗎?是否有不同的方法可以爲每個案例構建一個對象?

+0

+1:好問題 – Nilesh 2011-05-12 14:34:01

回答

1

您可以在測試類中內聯定義類;沒有理由爲他們製作單獨的文件。

public class TestCase { 
    private static class NoFieldClass 
    { 
    } 

    // And so on. 

    @Test 
    public void shouldFindZeroMappableFieldsInNoFieldClass() { 
     assertTrue(0 == countMappableFields(NoFieldClass.class)); 
    } 
} 

這可以讓您的測試源代碼區域保持乾淨。它將創建多個類文件,但至少您定義的內聯類將看起來像「TestCase $ NoFieldClass.class」,而不是頂層的「NoFieldClass.class」。

+0

+1:很好的答案! – Nilesh 2011-05-12 14:34:10

0

我通常只是在測試類裏面做一個private static class這樣的事情。如果你有多個測試文件需要做同樣的事情,你可能想創建頂級類。

+0

我永遠都不會讓它們變得很普通,因爲那樣會把測試聯繫在一起,在除了懶惰之外沒有任何理由的情況下將它們聯繫起來。 – jdmichal 2011-05-11 23:59:18

0

取決於您正在測試的內容。如果您正在進行某種自定義反射(例如,FieldHelper只是由於某種原因返回了一部分字段),您可能需要實際測試將要使用的對象) - 即實際運行反射測試一個map<CLass,Integer>其中的類映射到期望值。

相關問題