在我的應用程序中,我有一組DAO,我將其注入應用程序層。對於我正在編寫的驗收測試,我想用數據預加載dev_server數據存儲,所以我在我的JUnit測試中使用相同的Spring配置(使用@ContextConfiguration註釋)將相關DAO的實例注入到我的測試中。當我真的去存儲一些數據,例如:驗收測試將數據預加載到GAE開發服務器數據存儲區
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應用程序的web.xml與應用詳情閱讀(雖然我猜我在這裏真的是錯誤的);所以它不知道要寫入到在dev_server上運行的應用程序正在讀取/寫入的相同數據存儲。
如何讓我的測試「指向」與應用程序相同的數據存儲區?是否有一些「數據源」機制,我可以注入應用程序和測試?有沒有辦法讓我的測試強制數據存儲區api讀取所需的配置?
我嘗試在測試中設置數據存儲後備存儲(使用LocalDatastoreServiceTestConfig)與dev_server寫入的文件相同(例如:WEB-INF/appengine-generated/local_db.bin)並且測試會成功寫入實體到文件。但是,當我啓動dev_server並查看管理控制檯時,不會顯示寫在測試中的實體。 如果我運行另一個查詢數據存儲的測試(使用LocalDatastoreServiceTestConfig),則找到該實體。 該實體正在數據存儲中結束,但運行在dev_server上的應用程序無法看到它。 – kierans 2011-01-24 18:57:57
我認爲它與名稱空間有關,dev_server和LocalServiceTestHelper將實體放入該實體中,導致應用程序不能看到測試實體。閱讀http://code.google.com/appengine/docs/java/multitenancy/multitenancy.html我試着讓測試代碼將這些實體放入應用程序所執行的空('')命名空間中,但應用程序仍然看不到他們。 – kierans 2011-01-29 11:39:35