AEM-用于查询构建器的JUnit测试用例

时间:2018-11-15 14:46:36

标签: java mockito junit4 aem powermock

我们有一项业务需求,我们要通过特定路径查询一组资产,并将过期的资产从一个文件夹移动到存档文件夹, 我们如何为下面的代码编写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 :(得分:1)

是的,要模拟void方法,通常可以使用Mockito的verify语句来验证是否调用了预期的操作。看一下本文中的一些示例: 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方法时返回模拟查询对象。然后,您可以使用verify语句进行验证,以验证在执行代码时对模拟对象调用了getResult方法。对于moveAssetToDestination方法中作用于任何对象的事物,都可以执行类似的操作。