AEM - тестовый сценарий JUnit для построителя запросов - PullRequest
0 голосов
/ 15 ноября 2018

У нас есть бизнес-требование, когда мы запрашиваем набор активов по определенному пути и перемещаем просроченные активы из одной папки в папку архива, как мы можем написать контрольный пример JUnit для кода ниже,

@Reference
CommonConfigService commonConfigService ;
ResourceResolver resourceResolver ;
@Reference
QueryBuilder querybuilder;

private void queryForAssets()
{
    Session session = resourceResolver .adaptTo(Session .class);
    Map<String, String> map = new HashMap<String,String>();
    map.put("path", "myPath");
    map.put("type" ,"dam:Asset");
    map.put("property" ,"prism:ExpirationDate");
    final Query query = queryBuilder.createQuery(PredicateGroup.create(map),session);
    final SearchResults resultSet = query.getResult();
    for(Hit hit: resultSet.getHits())
    {
        //business logic,...iterating through each node path and reading the expiry date properties//
        moveAssetToDestination();
    }
}

В приведенном выше коде последняя функция moveAssetToDestination() будет перемещать все просроченные активы из одной папки в папку архива.Так что в принципе нет методов, которые бы точно возвращали какое-либо значение.Можно ли написать какой-либо JUnit для вышеуказанного кода?

1 Ответ

0 голосов
/ 15 ноября 2018

Да, чтобы смоделировать пустые методы, вы обычно можете использовать операторы проверки Mockito для проверки того, что ожидаемые действия были вызваны.Посмотрите в этой статье несколько примеров: https://www.baeldung.com/mockito-void-methods

Так что, если вы посмотрите на то, что делает moveAssetToDestination(), он, вероятно, вызывает методы для какого-либо объекта.Вы можете создать тест, в котором этот объект, для которого вызываются методы, является имитацией, а затем вы можете использовать операторы verify и перехватчики аргументов для проверки того, что метод был вызван с ожидаемыми параметрами.

Или в методе queryForAssetsвы бы сделали queryBuilder фиктивным объектом, используя аннотацию @Mock и @RunWith(MockitoJUnitRunner.class).См. http://www.wemblog.com/2016/12/how-to-write-tests-in-aem.html для примера этого.Затем вы можете настроить все так, чтобы при вызове метода createQuery он возвращал фиктивный объект Query.Затем вы можете выполнить проверку с помощью оператора verify, чтобы убедиться, что метод getResult вызывается для фиктивного объекта при выполнении кода.Подобные вещи могут быть сделаны для любых объектов, на которые воздействуют в методе moveAssetToDestination.

...