Android JUnit:定义一个不同的Application子类

5

对于我的普通Android项目,我在AndroidManifest.xml中有以下内容:

<application android:name=".utilities.App" ...>
     ....
</application>

然后我有我的App类:

public class App extends Application {
     ....
}

我有一个与Android项目相关的Android JUnit测试项目。一切正常,我可以编写JUnit测试。然而,我尝试在我的JUnit测试中运行代码覆盖率,并得到了庞大的结果。原因是我的应用程序类被调用并初始化,就好像我的应用程序实际上已经启动了一样。我不想让我的自定义应用程序类在运行JUnit测试或代码覆盖时执行。我需要为JUnit测试进行任何设置都将放在适当的JUnit setup()方法中。是否有任何方法可以防止执行我的自定义应用程序类,或者任何由于创建我的应用程序类而执行的类/方法/行都不计入代码覆盖率?


你没有告诉我们你是如何生成代码覆盖率报告的。你是使用EMMA工具对Android构建进行仪器化,还是使用其他方式? - Diego Torres Milano
据我所知,只有一种方法可以在Android上运行代码覆盖率,那就是使用EMMA实用程序。我只是运行Android提供的“ant coverage”命令。 - Nick
你找到另一个解决方案了吗? - kingston
1个回答

0

我找到了一个临时解决方案,除非有更好的想法。

  • 进入主Android项目的AndroidManifest.xml文件。
  • 将android:name属性从“.utilities.App”更改为“android.app.Application”
  • 运行代码覆盖率工具/JUnit测试
  • 将android:name属性从“android.app.Application”更改回“.utilities.App”
  • 重新部署应用程序到设备上(以便在代码覆盖/JUnit测试外部运行时使用正确的Application类)

我相信真正的解决方案是自动化这个过程,但我太懒了,而且它感觉像是一种hackish和错误的方法。但至少这是一个解决方法,除非有人有更好的想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接