Android单元测试和类成员可见性

时间:2012-09-14 15:53:04

标签: java android unit-testing

创建了一个android测试项目,目前正在尝试编写android单元测试

现在,如果你有一堆类,你试图测试它们的方法并且你已经很好并且应用了最小访问原则并使所有成员变量都是私有的,那么你如何编写有效的单元测试呢?

换句话说,我的单元测试位于我试图测试的类之外的类中,所以我无法访问断言语句中的任何成员变量

是否有针对此方案的解决方法,您希望访问所有内容以进行测试

请不要告诉我,我必须为每个成员变量编写getter和setter,这样我才能编写一些单元测试

(考虑一下,这更像是一个Java问题,而不是特定于android的问题)

2 个答案:

答案 0 :(得分:1)

有趣的问题......虽然您可能必须为每个成员变量编写getter / setter。将它们放在您仅用于测试的子类中是值得的,因此您可以轻松地在生产代码中保留封装。

这是我能想到的最好的解决方案。

编辑:或者你可以制作一个重复的课程进行测试,你可以用“公共”快速替换所有“私人”。

答案 1 :(得分:1)

如果你真的不想编写getter并想要验证字段变量,你仍然可以通过反射访问类字段变量并对它们进行断言,如下所示:

目标类:

public class TestMe{
    private String value = null;

    public void update(){
        value = "hello";
    }
}

测试:

public class TestMeTest {

    @Test
    public void testUpdate() throws NoSuchFieldException, IllegalAccessException {

        TestMe testMe = new TestMe();

        assertNull(getField(testMe, "value"));

        testMe.update();

        assertEquals("hello", getField(testMe, "value"));

    }

    private Object getField(Object root, String name) throws NoSuchFieldException, IllegalAccessException {

        Field field = root.getClass().getDeclaredField(name);
        field.setAccessible(true);

        Object value = field.get(root);

        field.setAccessible(false);

        return value;
    }
}