【问题标题】:How to call onStartCommand multiple times in a test?如何在测试中多次调用 onStartCommand?
【发布时间】:2014-06-01 11:04:17
【问题描述】:

我有以下设计:

public class MyService extends Service{
  protected Logger _log;
  int _counter;

  onStartCommand(...){
     _log.print (++_counter);
  }
}

public class MyServiceTestWrapper extends MyService{
  public void setLog(Logger mockLogger){ _logger = mockLogger; }
}

public class MyServiceTest extends ServiceTestClass<MyServiceTestWrapper>{
  public void test_myTest(){
    Logger fakeLogger = Mockito.Mock(Logger.class);

    // HERE IM NOT SURE HOW TO CONTINUE...
    //... 
    //...

    Mockito.verify(fakeLogger.write(Mockito.any(String.class))).times(3);
  }
}

如何获取服务实例并对 onStartCommand 进行 3 次调用?

感谢您的帮助

【问题讨论】:

    标签: android android-intent android-service android-service-binding


    【解决方案1】:

    每次调用 startService(即使它已经在运行),onStartCommand 都会被调用。

    所以,要调用 3 次,你可以简单地写:

    Intent serviceIntent = new Intent(MainActivity.this, MySerivce.class);
    for (int x = 0; x < 3; x++) {
        startService(serviceIntent);
    }
    

    来源:Android 文档(如下图)

    请注意,对 Context.startService() 的多次调用不会嵌套(尽管它们确实会导致对 onStartCommand() 的多次相应调用)

    【讨论】:

    • 首先 - 谢谢。但是当我尝试调试我的测试时,我第一次看到 onStartCommand 被调用,但在下一次它没有。 (即使调用 context.startService(publishIntent); 正在执行(第二次)。有什么想法吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多