在我的应用程序中,我有一组 DAO,我将它们注入(inject)我的应用程序层。对于我正在编写的验收测试,我想用数据预加载 dev_server 数据存储,因此我在 JUnit 测试中使用相同的 Spring 配置(使用 @ContextConfiguration 注释)将相关 DAO 的实例注入(inject)到我的测试中。当我实际去存储一些数据时,例如:

dao.add(entity) 

我得到了可怕的“没有为此线程注册 API 环境。”

Caused by: java.lang.NullPointerException: No API environment is registered for this thread. 
 at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:108) 
 at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:118) 
    .... 

这可能是因为我的测试用例没有在 GAE application-web.xml 中读取应用程序详细信息(尽管我在这里猜测我可能真的错了);因此它不知道要写入 dev_server 上运行的应用正在读取/写入的同一数据存储。

如何让我的测试“指向”与应用程序相同的数据存储?是否有一些“数据源”机制可以同时注入(inject)到应用程序和测试中?有没有办法让我的测试强制数据存储 API 读取所需的配置?

请您参考如下方法:

Here是一个讨论如何进行连接到开发数据存储的单元测试的页面。这就是您要找的东西吗?它基本上讨论了两个类,LocalServiceTestHelper 和 LocalDatastoreServiceTestConfig,您可以使用它们来设置测试环境。虽然给出的示例用于单元测试,但我相信它也适用于您的情况。

然后您可以配置诸如开发数据存储是写入磁盘还是仅保存在内存中(以加快测试速度)之类的事情。如果您希望此数据与您的开发服务器位于同一位置,您可能需要对此进行调整,因为我认为默认设置是“内存中”选项。如果您查看 javadoc有一个“setBackingStoreLocation”方法,您可以在其中指向您想要的任何文件。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!