根据available documentation,app引擎测试帮助程序类LocalServiceTestHelper可以模拟ApiProxy.getCurrentEnvironment().getRemainingMillis()的结果。

只要代码在与创建帮助器的线程相同的线程中运行,所有这些都可以正常工作,但是似乎当测试是多线程的(例如,测试Deferred任务时),第二个线程将不使用模拟响应。

如何获取帮助程序类以在任务队列任务中设置ApiProxy.getCurrentEnvironment().getRemainingMillis()的返回值?

最佳答案

如您所见,调用LocalServiceTestHelper.setUp()只会在当前线程中设置您的环境。

调用setUp()之后,您应该能够在ApiProxy.Environment testEnv = ApiProxy.getCurrentEnvironment()的实现中始终使用testEnv; wrap ApiProxy.EnvironmentFactory来获得刚刚设置的环境,该实现始终返回testEnv。然后,调用ApiProxy.setEnvironmentFactory,传入该新工厂。

final ApiProxy.Environment testEnv = ApiProxy.getCurrentEnvironment();
ApiProxy.setEnvironmentFactory(new ApiProxy.EnvironmentFactory() {
  @Override
  public ApiProxy.Environment newEnvironment() { return testEnv; }
};


这应该导致在所有线程中使用相同的环境。

该方法未经测试,但根据文档看来是合理的。

09-11 19:47