我正在尝试通过在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文件?
发布于 2013-12-29 05:52:16
让我先问一个问题:为什么我们需要Robolectric来进行单元测试?
答案是android.jar只附带类和实用程序方法的合同。这意味着这个jar中的每个方法、每个函数和构造函数都只有一行代码:
throw new RuntimeException("Stub!");您只能在这个jar上编译代码,而不能在桌面JVM上运行。如果你试图运行,那么当你试图实例化一个android类或调用任何android实用程序方法时,就会抛出一个异常。
Robolectric试图解决这个问题。从一开始,它就定制了ClassLoader,并且每次对安卓代码的调用都被替换为一个Robolectric实现。这使我们有可能在桌面JVM上测试我们的代码。但这也很难重新实现整个android,当你在设备上测试不同的东西时,你也会陷入这种情况。
所以策略从Robolectric版本2开始改变,它试图尽可能多地使用从一开始就是开源的android源代码。这就是为什么第一次运行测试时,Robolectric会下载并缓存自己的android.jar,它是从android源代码编译而来的。这样做是为了确保我们的测试环境行为接近于我们在设备上的行为。
我建议你在他们的blog,google group上阅读更多关于Robolectric的信息。你也可以在slideshare和youtube上找到大量关于它的演示文稿。我鼓励你一有信心就在github上为Robolectric项目做贡献,并希望回馈社区你的感激之情。
发布于 2014-02-23 18:03:25
当我第一次尝试设置Robolectric时,我也遇到了同样的问题。出现问题的原因是,我的项目src文件在包中:
com.example但我的测试文件不在包中。当我将我的测试文件移动到:
com.example问题解决了。我希望这能有所帮助。
https://stackoverflow.com/questions/20708144
复制相似问题