java - 任务队列任务中的单元测试请求超时

标签 java google-app-engine unit-testing task-queue

根据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/

相关文章:

java - 如何在 XX :XX:XX time? 处运行方法

python - 谷歌API Python客户端: "from six.moves import zip ImportError: No module named moves"

python - AppEngine Endpoints 中 MessageField 的 GET 请求参数为 None

java - Tomcat 没有在跨域 jquery ajax 调用中接收自定义 header

java - 将重要的应用内容保存到 xml 资源中

python - 如何根据变量指定 GAE Python ndb 字段名称

ruby-on-rails - 运行 RSpec 时我的负载和 "Finished in"次不同。我可以加快他们的速度吗?

python - pycharm 和单元测试——结构化项目

java - 单元测试数学代码

java - 我对 FileWriter 使用什么 IOException