gpt4 book ai didi

android - 如何在 android 上进行集成测试(或者如何在 TestCase 中获取和注入(inject)多个组件)

转载 作者:行者123 更新时间:2023-11-28 20:56:08 25 4
gpt4 key购买 nike

我有一个应用程序,其中包含一些相互通信的服务。它们都在一个进程中工作,因此不需要 Messenger。当应用程序运行时,我的主要服务连接到其他服务并将服务作为依赖项注入(inject)。例如 ImportService 需要 ParserService 来执行一些操作,所以 ImportService 有方法 setParserService(ParserService service);

它在实际操作中运行良好,但我无法为需要依赖项的服务运行测试,因为 ServiceTestCase.bindService() 只知道如何启动/绑定(bind)它实际测试的服务。它无法启动/绑定(bind)我需要作为依赖项的其他服务。它在我尝试获取其他服务时编译,但在尝试调用 bindService() 时崩溃。

我在谷歌上搜索了很多,但现在我只能看到三种解决方法:

  • 使应用程序更加原始。只使用类而不是服务;
  • 不进行注入(inject)。取而代之的是获取服务内部的依赖项。但是这样我将不得不等待依赖项(服务)绑定(bind)在服务内的某些地方。这将是一个糟糕的代码。我不能使用 onServiceConnected(),因为有时我可能需要多个服务作为依赖项。
  • 不要使用测试 :-)

因此,简而言之,问题是:我可以使用 ServiceTestCase 在测试中绑定(bind)一个特定服务。但是如何在一次测试中绑定(bind) 2 个、10 个或更多服务?

最佳答案

ServiceTestCase 提供了一个框架,您可以在其中在受控环境中测试服务类。它为[单个]服务的生命周期提供基本支持,并提供 Hook ,您可以使用这些 Hook 注入(inject)各种依赖项并控制测试服务的环境。

如果您正在执行各种服务的集成测试,您应该将它们作为使用它们的ActivityApplication 的一部分进行测试。

关于android - 如何在 android 上进行集成测试(或者如何在 TestCase 中获取和注入(inject)多个组件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632669/

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