测试接受Class参数的方法

时间:2011-05-11 23:47:50

标签: java unit-testing junit

我正在试图弄清楚如何测试我正在研究的小型库。以此简化方法为例:

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;
}

我应该在单独的文件中定义几个类并在我的所有测试中引用它们吗?是否有不同的方法可以为每个案例构建一个对象?

3 个答案:

答案 0 :(得分: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”。

答案 1 :(得分:0)

我通常只是在测试类中为这类事做一个private static class。如果你有多个测试文件需要做同样的事情,你可能想要创建顶级类。

答案 2 :(得分:0)

取决于您正在测试的内容。如果您正在进行某种自定义反射(例如,FieldHelper仅因某种原因返回了字段的子集),您可能希望实际测试您将要使用它的对象) - 即实际运行您的反射测试一个map<CLass,Integer>,其中类映射到期望值。

相关问题