2011-05-11 110 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>其中的类映射到期望值。