尝试从junit访问worklight.properties时出现Null异常

时间:2015-01-13 14:28:55

标签: java junit ibm-mobilefirst mobilefirst-adapters mobilefirst-server

使用MobileFirst Platform 6.3。

当我尝试使用junit从worklight.properties获取worklight项目中服务器文件夹的配置路径时,返回的值为null。

我使用以下代码来获取路径。

WorklightConfiguration.getInstance().getString("mbaas.configRootDir");

编辑:这就是我想要做的。我在junit中运行此代码,它应该返回true

public class Test2 {
    @Test 
    public void test() { 
        //customProperty=123 
        String str=getWorklightProperty("customProperty"); 
        assertEquals("123", str);
    }

    public String getWorklightProperty(String propertyName) {
        return WorklightConfiguration.getInstance().getString(propertyName);
    }
}

2 个答案:

答案 0 :(得分:0)

编辑:这对JUnit不起作用。运行此代码时,应该连接到Worklight Server。

当您通过调用适配器运行它时,它适配器正在与服务器通信,这就是您可以获得响应的原因。

当你直接运行时,它没有服务器可以与之交谈,这就是你得到null的原因。


您需要验证您的代码是否有效 我在MFP 6.3中测试了以下内容,并成功从worklight.properties中检索了值:

  1. 在server / conf / worklight.properties中添加了以下属性:

    customProperty=123
    
  2. 在server / conf / java中创建了一个新的Java类:

    package com.myClass.customcode;
    
    import com.worklight.server.bundle.api.WorklightConfiguration;
    
    public class Test {
        public static String getWorklightProperty(String propertyName){
            return WorklightConfiguration.getInstance().getString(propertyName); 
        }
    }
    
  3. 在-impl.js文件中创建了一个新的HTTP适配器,其中包含以下内容:

    function test() {
        return {
            result: com.myClass.customcode.Test.getWorklightProperty("customProperty")
        }
    }
    
  4. 在调用“test”程序后,响应是:

        {
           "isSuccessful": true,
           "result": "123"
        }
    

答案 1 :(得分:0)

您正在尝试单元测试一些通常在Worklight Server环境中运行的代码,它取决于

WorklightConfiguration.getInstance().getString(propertyName); 

并且只能在服务器内部运行,而不能在JUnit之类的东西上作为独立的单元测试运行。

如何解决这个问题?首先,你想要测试的是什么?你真的试图测试WorklightConfiguration.getInstance()。getString()是否有效?你为什么要做这样的事情?您是否建议测试每个Worklight API?我声称你应该对你的代码进行单元测试,而不是Worklight。所以如果你有这样的伪代码代码:

  figure out the name of a property
  WorklightConfiguration.getInstance().getString(thePropertyWeJustFigured)
  do some stuff with the value we obtained

然后您可以通过提供WorklightConfiguration API的Mock实现来对代码进行单元测试。您可以使用诸如JMock之类的框架,然后您就可以在JUnit中执行代码而不依赖于Worklight。这是真正的UNIT测试,没有依赖性的测试。

就个人而言,我不太喜欢这种方法,准备模拟的努力非常大。相反,我更喜欢进行结构化集成测试。那就是我在适配器整体上测试它,同时它在Worklight服务器内部运行。我仍然可以使用JUnit,但它运行的测试使用HTTP调用框架来调用适配器。所以测试脚本如下:

 ensure worklight server is running and adapter under test is deployed
 run JUnit tests that issue HTTP requests to the adapter and inspect the results.