【问题标题】:Unit testing request timeout in a task queue task任务队列任务中的单元测试请求超时
【发布时间】:2014-08-19 07:32:15
【问题描述】:

根据available documentation,应用引擎测试助手类LocalServiceTestHelper可以模拟来自ApiProxy.getCurrentEnvironment().getRemainingMillis()的结果。

只要代码在创建助手的同一线程中运行,这一切都可以正常工作,但似乎当测试是多线程时(例如测试延迟任务时),第二个线程将不会使用模拟响应.

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

【问题讨论】:

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


    【解决方案1】:

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

    在调用setUp() 之后,您应该能够使用ApiProxy.Environment testEnv = ApiProxy.getCurrentEnvironment() 获得刚刚设置的环境;在ApiProxy.EnvironmentFactory 的实现中包装testEnv,它总是返回testEnv。然后,调用ApiProxy.setEnvironmentFactory,进入那个新工厂。

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

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

    这种方法未经测试,但根据文档看起来很合理。

    【讨论】:

    • 似乎是一个可能的解决方案(根据文档),但在尝试实际实现它时,我在 SDK 中找不到接口ApiProxy.EnvironmentFactory。顺便说一句,我正在使用 app engine 1.9.6。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多