10

我对 robolectric 的问题是它不能生成真正的 HttpRequest。

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

4

2 回答 2

16

Jan Berkel 向 Robolectric 提交了一个拉取请求,该请求于 3 月 8 日被合并到 master 中。您现在可以Robolectric.getFakeHttpLayer().interceptHttpRequests(false);在测试开始时调用以绕过 Robolectric 中的模拟 http 层。

您可以直接从Sonatype下载 jar以包含在您的 Eclipse Android 项目中。如果您使用的是 Maven 并且 1.1 尚未发布(请查看上面的 Sonatype 网址),那么您将需要添加 sonatype 快照存储库并使用 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>

我将它用于针对真实服务器运行的集成测试,它运行良好。

于 2012-03-20T03:38:36.937 回答
2

基本上你不会。Robolectric 是一个测试框架,它是这样设计的,你问的不是我们用 Robolectric 做什么。

我相信你已经浏览过这个关于使用 Robolectric 测试 HTTP 请求的博客。实际上,标题“如何测试 HTTP 请求”在 IMO 中并不十分准确。我宁愿称它为“如何模拟 HTTP 请求”,如本博客所述,使用 Robolectric 模拟 HTTP 请求的最佳位置是您可能在项目开发/测试期间不想打扰对远程服务器的真实网络调用阶段。

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

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

于 2012-02-28T04:48:05.140 回答