我正在尝试通过github上的thecodepath教程启动并运行Robolectric。但是,在运行测试时,eclipse会尝试下载org/robolectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.jar
。这个30+ mb .jar文件究竟是什么?是否应该替换教程中的android.jar
文件?
答案 0 :(得分:8)
让我先问一个问题:为什么我们需要Robolectric进行单元测试Android?
答案是android.jar
仅附带类和实用程序方法的合同。这意味着这个jar中的每个方法,每个函数和构造函数只有一行代码:
throw new RuntimeException("Stub!");
您只能针对此jar编译代码,而不能在桌面JVM上运行。如果您尝试运行,那么只要您尝试实例化android类或调用任何android实用程序方法,就会抛出异常。
Robolectric
尝试解决此问题。从头开始,它会自定义ClassLoader
,并且每次调用android代码都会被Robolectric
实现替换。这使我们有可能在桌面JVM上测试我们的代码。但是当你测试设备上存在的不同内容时,你很难重新实现整个android以及陷阱。
所以策略从Robolectric
版本2改变了。它试图尽可能多地使用从源头开源的android源代码。这就是为什么第一次运行测试Robolectric
下载并缓存自己的android.jar,这是从android源码编译的。这样做是为了确保我们的测试环境行为接近我们在设备上的行为。
我建议您在blog,google group上详细了解Robolectric
。您还可以在slidehare和youtube上找到大量有关它的演示文稿。我鼓励您在对github Robolectric
项目做出贡献后立即对此有所贡献,并希望对社区表示感谢。
答案 1 :(得分:1)
com.example
但我的测试文件不在包内。当我将测试文件移动到:
时com.example
问题得到解决。我希望这可能有所帮助。