2013-10-17 29 views
2

我有一個Google App Engine Java應用程序,它從SystemProperty.environment.value()和SystemProperty的所有其他靜態成員返回null。當通過Maven運行我的JUnit測試時,我看到了這一點。爲什麼在Google App Engine中SystemProperty.environment.value()返回null?

import com.google.appengine.api.utils.SystemProperty; 
... 
void printProps() { 
    log.info("props:" + System.getProperties()); 
    log.info("env=" + SystemProperty.environment.value()); 
    log.info("log=" + System.getProperty("java.util.logging.config.file")); 
    log.info("id=" + SystemProperty.applicationId.get()); 
    log.info("ver=" + SystemProperty.applicationVersion.get()); 
} 

上面唯一返回非null的項是System.getProperties()。

下面是我的一些安裝細節:

  • 的IntelliJ IDEA EAP 13
  • Maven的
  • 的App Engine SDK 1.8.5
  • 的Java 7(1.7.0_40)
  • JUnit 4
+0

我可以根據需要提供有關我的設置和代碼的更多詳細信息,但我不確定要在此處發佈更多內容。我想我正在尋找什麼要檢查的建議。 – jpitt42

+0

在devserver上部署並投入生產之後,我發現環境在那裏,並且很好。我想我的JUnit測試是我自己負責提供環境的。我將使用App Engine重新閱讀JUnit的文檔,以確切瞭解我需要做的事情。 – jpitt42

回答

3

我遇到了同樣的問題。我試圖呼籲LocalServiceTestHelper這些方法,但這些並沒有填充SystemProperty.applicationId或SystemProperty.version

setEnvAppId(java.lang.String envAppId) 
setEnvVersionId(java.lang.String envVersionId) 

例如

public final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig(), new LocalTaskQueueTestConfig()).setEnvAppId("JUnitApplicationId").setEnvVersionId("JUnitVersion"); 

我的解決辦法是簡單地填充這些屬性在自己的JUnit我的設置()方法:

@Before 
public void setUp() throws Exception { 
    SystemProperty.version.set("JUnitVersion"); 
    SystemProperty.applicationId.set("JUnitApplicationId"); 
    SystemProperty.applicationVersion.set("JUnitApplicationVersion"); 
    SystemProperty.environment.set(SystemProperty.Environment.Value.Development); 
    helper.setUp(); 
    datastore = DatastoreServiceFactory.getDatastoreService(); 
    queue = QueueFactory.getDefaultQueue(); 
} 

注意,對於SystemProperty.Environment唯一有效的值是靜態的最終值的生產和發展。