这看起来真的很神奇,我很想知道为什么会这样:)
这是我的单元测试:
public class SelectThemeActivityTest
extends ActivityInstrumentationTestCase2<SelectThemeActivity> {
private final static int[] STATIC_ARRAY = { 0, 1, 2 };
public SelectThemeActivityTest() {
super("com.the7art.simplewallpaper", SelectThemeActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
// some array usage here - will throw NullPointerEcxeption on second test
// see description below
STATIC_ARRAY[0] = 2;
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testFirst() {
}
public void testSecond() {
}
public void testThird() {
}
}
如果我运行此测试用例第一次测试成功完成,其余所有操作都会失败,方法是从 setUp()中抛出 NullPointerException - 该行它试图访问STATIC_ARRAY。
更令我困惑的是,如果我更改测试用例以扩展 AndroidTestCase 而不是 ActivityInstrumentationTestCase2 ,那么所有测试成功完成!魔法! : - )
此外,如果我从STATIC_ARRAY中删除'static'关键字,测试也会成功。
所以很明显,某些东西正在通过在测试运行之间使其为空来修改我的STATIC_ARRAY,很可能是在 tearDown()中,而某些东西与有关> ActivityInstrumentationTestCase2 ,但如何跟踪某事? :-)任何想法?
答案 0 :(得分:3)
原因是从super.tearDown():google-groups discussion调用的scrubClass()方法。解决方案是 - overriding this method。
答案 1 :(得分:1)
在STATIC_ARRAY上放置一个观察点并看看谁修改它,虽然没有太多的候选人(因为该字段是私有的,几乎只有一个候选人,你刚刚发布的课程,所以图片中缺少一些东西