0

Использование платформы MobileFirst 6.3.Null Exception при попытке доступа к lightlight.properties от junit

Когда я пытаюсь получить путь конфигурации папки сервера в проекте worklight от worklight.properties, используя junit, возвращаемое значение равно 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); 
    } 
} 
+0

Какая версия подсветки вы используете? –

+0

Что это за «путь конфигурации», на который вы ссылаетесь? Нет такой папки, файла или свойства в любом месте под папкой сервера в проекте Worklight; уточните пожалуйста в своем вопросе. Подробно о сценарии, который вы пытаетесь достичь. –

+0

WorklightConfiguration.getInstance(). GetString ("mbaas.configRootDir"); Как это выглядит, И это определено в файле light.properties работы в папке server/conf. – cherry

ответ

0

Редактировать: это не сработает для вас с JUnit. Когда вы запустите этот код, ожидается, что он подключится к серверу Worklight.

Когда вы запускаете его, вызывая адаптер, адаптер адаптируется к серверу, поэтому вы можете получить ответ.

Когда вы запускаете его напрямую, у него нет сервера, с которым можно разговаривать, и именно поэтому вы получаете null.


Необходимо проверить, что ваш код действителен.
Я проверил следующий MFP 6.3 и успешно извлекаться значения из worklight.properties:

  1. Добавлена ​​в сервере/CONF/worklight.properties следующего свойства в самом низу:

    customProperty=123 
    
  2. создал новый класс Java в сервере/CONF/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. Создан новый HTTP адаптер ж Ith следующего в -impl.js файл:

    function test() { 
        return { 
         result: com.myClass.customcode.Test.getWorklightProperty("customProperty") 
        } 
    } 
    

После вызова процедуры "тест", ответ был:

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

Дело в том, что Idan 1), поскольку я упомянул вас, я работаю над ним через junit, поэтому мое требование - запустить его через junit .2) Он отлично работает через адаптер, но когда я говорю, прогоняю junit, он меня бросает. – cherry

+0

Я отредактировал пример кода, который вы указали в соответствии с моим требованием в моем вопросе. Пожалуйста, проверьте, спасибо – cherry

+0

Любая идея Идан, почему я получаю исключение null только при запуске через junit.Пожалуйста, помогите. – cherry

0

Вы пытаетесь Test Unit некоторого кода, который как правило, работают в среде Worklight сервера, это зависит от

WorklightConfiguration.getInstance().getString(propertyName); 

и может функционировать только внутри сервера не при запуске, как автономный модульный тест под чем-то вроде JUnit.

Как это решить? Во-первых, именно то, что вы пытаетесь проверить? Вы действительно пытаетесь проверить, что WorklightConfiguration.getInstance() работает? GetString()? Зачем вам это делать? Вы предлагаете протестировать каждый API-интерфейс Worklight? Я утверждаю, что ваш должен быть Unit, проверяющий ваш код, а не Worklight. Так что если у вас есть код, как этот псевдо-код:

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

, то вы можете проверить блок кода, обеспечивая Mock реализацию WorklightConfiguration API.Вы можете использовать фреймворки, такие как JMock, тогда вы в том положении, что ваш код будет выполняться внутри JUnit без ограничений на Worklight. Это истинное тестирование UNIT, тестирование без зависимостей.

Лично я не очень одобряю этот подход, усилие в подготовке Mocks довольно велико. Вместо этого я предпочитаю делать структурированные тесты интеграции. То есть я тестирую адаптер в целом, пока он работает внутри сервера 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.