根据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; }
};
这应该导致在所有线程中使用相同的环境。
该方法未经测试,但根据文档看来是合理的。