Тестирование Liferay Junit-Mockito - PullRequest
3 голосов
/ 07 марта 2011

Я пытаюсь проверить мой код плагина liferay с помощью JUNIT и Mockito.В настоящее время я проверяю реализации сервиса, чтобы он возвращал фиктивные данные и проверял их функциональность.

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно протестировать некоторый код, который принимает свойства в виде: PropsUtil.get ("someKey") Но когда я запускаю его как отдельный тест JUNIT, PropsUtil не читает ни из одного изфайл свойств.Можно ли как-нибудь заставить тест прочитаться из файла свойств liferay (portal * .properties) без изменения исходного кода?

Ответы [ 6 ]

3 голосов
/ 02 июля 2012

Я использовал следующий метод:

  • Мой TestClass расширяет BaseServiceTestCase (доступно в liferay src)
  • Храните portal-test.properties внутри папки теста (со значениями теста).
  • Запустите контрольный пример.

В этом случае liferay загружает все свойства, а также инициализирует пружину.

2 голосов
/ 19 августа 2015

Вы можете создать реализацию интерфейса Props на основе Properties:

private static class MockProps implements Props {
    private Properties properties = new Properties();

    MockProps addProperty( String key, String value ) {
        properties.setProperty( key, value );
        return this;
    }

    @Override
    public boolean contains( String key ) {
        return properties.containsKey( key );
    }

    @Override
    public String get( String key ) {
        return properties.getProperty( key );
    }

    @Override
    public String get( String key, Filter filter ) {
        throw new UnsupportedOperationException( "not needed by mock" );
    }

    @Override
    public String[] getArray( String key ) {
        throw new UnsupportedOperationException( "not needed by mock" );
    }

    @Override
    public String[] getArray( String key, Filter filter ) {
        throw new UnsupportedOperationException( "not needed by mock" );
    }

    @Override
    public Properties getProperties() {
        return properties;
    }

    @Override
    public Properties getProperties( String prefix, boolean removePrefix ) {
        return PropertiesUtil.getProperties( properties, prefix, removePrefix );
    }
}

Затем использовать @BeforeClass для его настройки:

@BeforeClass
public static void init() {
    PropsUtil.setProps( new MockProps()
            .addProperty( "key1", "silly" )
            .addProperty( "key2", "silly again" ) );
}
2 голосов
/ 07 марта 2011

В качестве последнего средства вы можете использовать PowerMock и mock PropsUtil.get() вызов метода. В конце концов, это обычный старый java-синглтон, и код с одиночными кодами не так легко проверить ..

0 голосов
/ 10 июля 2012

Вы также можете издеваться над звонком так:

mockStatic(PropsUtil.class);

when(
  PropsUtil.get(PropsKeys.SOCIAL_ACTIVITY_COUNTER_PERIOD_LENGTH)
).thenReturn("1");
0 голосов
/ 07 марта 2011

вам нужно вызвать InitUtil.init (), который инициализирует базовую инфраструктуру, включая свойства ...

Если вы хотите пойти дальше и загрузить даже весеннюю инфраструктуру, вам нужно иметь библиотеки liferay на classpath. Я объясняю, как сделать это в среде maven в этом посте: как использовать сторонние библиотеки liferay в плагине maven SDK . Если вы это сделаете, то все, что вам нужно сделать, - это настроить spring.configs с определениями портала springml xml (инфраструктурные + те, которые имеют необходимые службы Spring) и вызвать Init.initWithSpring();, который позаботится о запуске портала liferay и он использует те весенние бобы, которые вы смешиваете в spring.configs. Вам также нужно будет немного изменить свойства liferay. Но это действительно зависит от варианта использования.

0 голосов
/ 07 марта 2011

Если вы не проверяете, что значения фактически установлены в portal.properties, просто вызовите PropsUtil.set в своем тесте.

...