是否可以使用robolectric进行真正的http请求

时间:2012-02-28 03:28:56

标签: android testing robolectric

我对robolectric的问题是它没有真正的HttpRequests。

我可以使用实际调用本地测试服务器的真实替换robolectric的HttpClient实现吗?

2 个答案:

答案 0 :(得分:16)

Jan Berkel向3月8日合并为主人的Robolectric提交了a pull request。您现在可以在测试开始时调用Robolectric.getFakeHttpLayer().interceptHttpRequests(false);以绕过Robolectric中的模拟http层。

您可以直接从Sonatype下载jar以包含在Eclipse Android项目中。如果您使用Maven并且1.1尚未发布(请查看上面的Sonatype url),那么您将需要添加sonatype snapshot repo并使用robolectric 1.1-SNAPSHOT。您可以通过将以下内容添加到pom.xml

来完成此操作
<repositories>
    <repository>
        <id>sonatype-snapshots</id>
        <name>Sonatype Snapshots</name>
        <layout>default</layout>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
...
<dependencies>
   <dependency>
        <groupId>com.pivotallabs</groupId>
        <artifactId>robolectric</artifactId>
        <version>1.1-SNAPSHOT</version>
        <scope>test</scope>
    </dependency>
    ...
</dependencies>

我正在使用它进行针对真实服务器运行的集成测试,并且运行良好。

答案 1 :(得分:2)

基本上你没有。 Robolectric是一个测试框架,这就是它设计的工作方式,你问的不是我们用Robolectric做的。

我确信您已经跨越了this blog来使用Robolectric测试HTTP请求。实际上标题“如何测试HTTP请求”并不是很准确的IMO。我宁愿称之为“如何模拟HTTP请求”,如本博客所述,使用Robolectric模拟http请求的最佳位置是你真的不想打扰真正的网络远程调用服务器可能在项目开发/测试阶段。

假设我有一个主要活动连接到我的银行帐户进行某些操作,提交按钮应该将我的输入信息发布到远程服务器更新我的帐户信息,然后根据不同的响应将我带到几个不同的活动。我已经顺利编写了所有代码,HttpClient,带有提交按钮的表单,对下一个活动的新意图等等都很好,干净。是的,我如何测试点击提交按钮,根据这些不同的响应打开正确的活动,无需更改我的活动源代码或使用真实的网络电话来拧我的真实银行帐户。答案是Robolectric mock http请求。在这种情况下使用Robolectric的关键不是测试真正的http请求,而是用于欺骗我的httpClient代码并测试我的应用程序代码的其他部分,如UI的东西。最终,在部署达到最终稳定状态的某个阶段,真正的网络测试应该在仿真器或真实设备上执行。

Robolectirc团队声称的另一个优势是您不需要在仿真器或设备上启动仪器测试,这是低效的并且会减慢应用程序开发/测试生命周期。