gpt4 book ai didi

android - 如何测试使用 Retrofit 和 Dagger2 的 REST API

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:05 24 4
gpt4 key购买 nike

我想创建一个单元测试来验证 API 是否成功获取了 repo 列表。我希望测试实际上建立网络连接而不是使用模拟服务器。此外,最好使用 RoboElectric,这样测试就可以在 JVM 上运行。

这是为了测试 MVP 架构中的模型。

我正在使用 Mosby 的示例项目,它使用 Dagger 2 和 Retrofit 1.9。

public interface GithubApi
{
@GET("/repositories")
@Headers("Cache-Control: no-cache")
public void getRepos(Callback<List<Repo>> callback);
}

这是模块:

@Module()
public class SampleModule
{
@Provides @Singleton public GithubApi providesGithubApi()
{
OkHttpClient client = new OkHttpClient();
client.setCache(new Cache(context.getCacheDir(), 10 * 1024 * 1024));

RestAdapter restAdapter = new RestAdapter.Builder()
.setClient(new OkClient(client))
.setEndpoint("https://api.github.com")
.build();

return restAdapter.create(GithubApi.class);
}
}

最佳答案

你到底想测试什么?我问是因为您似乎不清楚自己真正想要什么:

  • 测试 API?后端的工作是提供功能完备的 API。
  • 测试您的应用程序是否正确进行 http 通信?听起来您想测试 Retrofit。但是 Retrofit 已经过测试。您可以假设改造有效,而无需再次测试。
  • 测试 json 是否被正确解析? Retrofit 内部使用的 jackson 或 gson 已经实现了这一点。同样,无需再次测试。

所以仍然是同一个问题:您实际上想在“模型”(MVP 中的业务逻辑层)上测试什么?如果改造是您的整个业务逻辑,则可以测试以下内容(尚未通过上述外部库进行测试):

  • 您的 POJO 类注释是否正确,以便 gson/jackson 正确反序列化从 Github API 收到的 json。怎么做?在那种情况下,您需要可靠的模拟数据并且不能使用实时 API。在那种情况下,您必须模拟服务器响应。否则你无法编写单元测试,因为如果你明天再次运行测试,GithubApi 将返回不同的数据。
  • 您可以测试您是否在您的应用中正确处理了所有 HTTP 响应代码。但是,您还必须模拟 Github API,否则您无法模拟 Github API 返回 404 响应或 401 等。

如果您的模型只是改造,那么这就是您可以为单元测试“模型”编写的那种单元测试。

I would like that the test actually makes the network connection instead of using a Mock Server.

我希望您现在明白需要 MockServer。

否则听起来你想写一种集成测试。但同样,您实际上想通过该集成测试测试什么?

在我看来,您似乎只是想确保您的应用在从 GithubAPI 加载数据并在 UI 的项目列表中滚动时不会崩溃,对吗?

所以这样的“集成测试”可以用 Robolectric 和 Espresso 来编写。但是,那实际上不是测试!在这样的测试中你有任何 assertEquals() 等吗?所以这是一个非常愚蠢的测试,因为除了您的应用程序没有崩溃之外,您无法验证任何内容。如果那是您正在寻找的,请继续,为您的 Activity 编写一个 Espresso 测试,加载实时数据并将您的 recylcerview 一直向下滚动直到结束。但是您实际上并没有通过这样的测试涵盖任何内容。它不可靠、不可重现,只能验证您的应用程序没有在“快乐路径”中崩溃。但这与启动应用程序时手动执行的操作非常相似。

所以问问自己:我想测试什么?我究竟应该测试什么?如前所述,测试改造没有意义,因为它已经被 square 测试过了。测试滚动 RecyclerView 是否有效也没有意义,因为 UI 小部件 RecyclerView 已经在 android 框架内部进行了测试。

关于android - 如何测试使用 Retrofit 和 Dagger2 的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com