0

我没有找到一种方法来执行称为“LocalBackendServiceTestConfig”的东西......从这个页面查看这个 - https://developers.google.com/appengine/docs/java/tools/localunittesting/javadoc/com/google /appengine/tools/development/testing/package-tree。好像没有。。。

所以,如果我有像这样在我的 JUnit 中运行的代码片段:

TaskOptions taskOptions = TaskOptions.Builder.withUrl(PageConstant.PROCESS_CSV_FILE)
                                .param("blobId", blobId)
                                .param("drive", csvUploadFileModel.getDriveStatus())
                                .param("sites", csvUploadFileModel.getSitesStatus())
                                .header("Host", BackendServiceFactory.getBackendService().getBackendAddress("backend-1"))
                                .method(Method.POST);

它会抛出这个异常:

Caused by: java.lang.NullPointerException
    at com.google.appengine.api.backends.BackendServiceImpl.getDevAppServerLocalAddress(BackendServiceImpl.java:70)
    at com.google.appengine.api.backends.BackendServiceImpl.getBackendAddress(BackendServiceImpl.java:43)

知道如何解决这样的问题吗?

4

1 回答 1

1

不幸的是,谷歌不提供此功能。

我通过创建一个用于测试的模拟来解决这个问题。

public class BackendServiceFactory {

public static BackendService getBackendService() {
    return new MockBackendService();
}

public static class MockBackendService implements BackendService {

    /*
     * (non-Javadoc)
     * @see com.google.appengine.api.backends.BackendService#getBackendAddress(java.lang.String)
     */
    @Override
    public String getBackendAddress(String arg0) {
        return "localhost:8080";
    }

    /*
     * (non-Javadoc)
     * @see com. google.appengine.api.backends.BackendService#getBackendAddress(java.lang.String,
     * int)
     */
    @Override
    public String getBackendAddress(String arg0, int arg1) {
        // TODO Auto-generated method stub
        return null;
    }

    /*
     * (non-Javadoc)
     * @see com.google.appengine.api.backends.BackendService#getCurrentBackend()
     */
    @Override
    public String getCurrentBackend() {
        // TODO Auto-generated method stub
        return null;
    }

    /*
     * (non-Javadoc)
     * @see com.google.appengine.api.backends.BackendService#getCurrentInstance()
     */
    @Override
    public int getCurrentInstance() {
        // TODO Auto-generated method stub
        return 0;
    }

}
}

但是,当运行配置了后端的开发服务器时,任务队列不起作用。你应该看看这个问题(从 2011 年开始)。

于 2013-04-25T06:23:05.420 回答