我想创建一个单元测试,用于验证API是否成功获取了Repos列表。我希望测试实际上建立网络连接而不是使用模拟服务器。而且,最好使用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);
}
}
答案 0 :(得分:26)
你真的想测试什么? 我问,因为你似乎不清楚你真正想要的是什么:
所以仍然是同一个问题:你真正想要测试什么&#34;模型&#34; (MVP中的业务逻辑层)?如果改造是您的整个业务逻辑,那么可以测试以下内容(尚未经过上述外部库测试):
因此,您可以为单元测试&#34;模型&#34;进行单元测试。如果您的模型只是改造。
我希望测试实际上建立网络连接而不是使用模拟服务器。
我希望你现在明白需要一个MockServer。
否则听起来你想要编写一种集成测试。但同样,你真的想用集成测试测试什么?
对我而言,您似乎只想确保您的应用在从GithubAPI加载数据并滚动到UI中的项目列表时不会崩溃,对吗?
所以这样的&#34;集成测试&#34;可以用Robolectric和Espresso书写。但是,这实际上不是一个考验!在这样的测试中你有assertEquals()
等吗?所以这是一个非常愚蠢的测试,因为除了您的应用程序没有崩溃之外,您无法验证任何内容。如果这是您正在寻找的,请继续,为您的活动写一个Espresso测试,加载实时数据并将您的recylcerview一直向下滚动直至结束。但是你实际上已经用这样的测试覆盖了什么。它不可靠,可重现,只能验证您的应用是否在“快乐路径”中崩溃了#34;。但这与在启动应用程序时手动执行操作非常相似。
所以问问自己:我想测试什么?我应该测试什么?如上所述,测试改造没有意义,因为它已经通过方形测试。滚动RecyclerView的测试工作没有意义,因为UI小部件RecyclerView已经在android框架内部进行了测试。
答案 1 :(得分:1)
您要搜索的关键字是集成测试。集成测试总是很棘手(因为你依赖于互联网连接,测试可能很不稳定),我建议你在完成所有单元和UI测试后再进行测试。以下是两个可能对您有用的链接: