3

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

现在,如果您有一堆要测试其方法的类,并且您做得很好并且应用了最少访问原则并将所有成员变量设为私有,那么您如何编写有效的单元测试?

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

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

请不要告诉我我必须为每个成员变量编写 getter 和 setter 以便我可以编写一些单元测试

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

4

2 回答 2

1

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

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

编辑:或者您可以制作一个重复的类进行测试,您可以在其中快速将所有“私有”替换为“公共”。

于 2012-09-14T15:59:15.787 回答
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;
    }
}
于 2012-09-14T20:37:05.800 回答