根据available documentation应用引擎测试帮助程序类 LocalServiceTestHelper
可以模拟 ApiProxy.getCurrentEnvironment().getRemainingMillis()
的结果。
只要代码在创建帮助程序的同一线程中运行,这一切都可以正常工作,但似乎当测试是多线程时(例如测试延迟任务时),第二个线程将不会使用模拟响应。
如何获取辅助类来设置任务队列任务中 ApiProxy.getCurrentEnvironment().getRemainingMillis()
的返回值?
最佳答案
正如您所发现的,调用LocalServiceTestHelper.setUp()
只会在当前线程中设置您的环境。
调用 setUp()
后,您应该能够使用 ApiProxy.Environment testEnv = ApiProxy.getCurrentEnvironment()
获取刚刚设置的环境;将 testEnv
包装在 ApiProxy.EnvironmentFactory
的实现中,该实现始终返回 testEnv
。然后,调用 ApiProxy.setEnvironmentFactory
,传入该新工厂。
final ApiProxy.Environment testEnv = ApiProxy.getCurrentEnvironment();
ApiProxy.setEnvironmentFactory(new ApiProxy.EnvironmentFactory() {
@Override
public ApiProxy.Environment newEnvironment() { return testEnv; }
};
这应该会导致所有线程使用相同的环境。
此方法未经测试,但根据文档看起来很合理。
关于java - 任务队列任务中的单元测试请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25377894/