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



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

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

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

  • 使应用程序更加原始。只使用类而不使用服务
  • 不要打针。而是在服务内部获取依赖项。但是通过这种方式,我将不得不等待依赖项(服务)在服务内部的某些地方被绑定。这将是一个错误的代码。我不能使用onServiceConnected(),因为有时我可能需要多个服务作为依赖项
  • 不使用测试:-)

所以,简单地说,问题是:我可以通过使用ServiceTestCase在测试中绑定一个特定的服务。但是如何在一次测试中绑定2个、10个或更多服务?

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

如果您正在执行各种服务的集成测试,则应将它们作为活动应用程序的一部分进行测试。