一个很头疼的问题:做单元测试时,经常遇到界面与逻辑相耦合的情况:
想调用一个私有函数,必须通过其它公有函数来完成,而公有函数(或这个私有函数)的调用又涉及到一系列变量及控件的初始化,如果强行调用/使用反射调用,就会不可避免的出现NullPointerException。
解决方案:
使用ActivityInstrumentationTestCase2来获取实际的Activity与控件。
这里“实际的”想表达的意思是:我们手动操作一个app时,打开一个Activity一般是不会出现空指针异常的,它的各种参数、变量、控件都被完整的初始化好了,而且能完美响应各种操作。如果我们能在程序中获取这个上下文下的Activity,就不愁那些烦人的(毫无意义的)初始化工作了。
新建一个测试工程,新建一个类并继承自ActivityInstrumentationTestCase2<想要获取的Activity>。运行这个Test,目标Activity就会被打开,这个类的getActivity()方法就可以获取目标Activity了。