2013-10-17 30 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唯一有效的值是静态的最终值的生产和发展。