java - AEM - 用于查询生成器的 JUnit 测试用例

标签 java mockito junit4 aem powermock

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

最佳答案

是的,要模拟 void 方法,您通常可以使用 Mockito 的 verify 语句来验证是否调用了预期的操作。看一下这篇文章的一些例子: https://www.baeldung.com/mockito-void-methods

因此,如果您查看 moveAssetToDestination() 的作用,它可能会调用某种对象的方法。您可以构造一个测试,其中调用方法的对象是一个模拟对象,然后您可以使用验证语句和参数捕获器来验证是否使用预期参数调用了该方法。

或者在 queryForAssets 方法中,您可以使用 @Mock 注释和 @RunWith(MockitoJUnitRunner.class) 使 queryBuilder 成为模拟对象。请参阅http://www.wemblog.com/2016/12/how-to-write-tests-in-aem.html举个例子。然后您可以进行设置,以便在调用其 createQuery 方法时返回一个模拟查询对象。然后,您可以使用 verify 语句进行验证,以验证执行代码时是否在模拟对象上调用了 getResult 方法。对于 moveAssetToDestination 方法中作用的任何对象,都可以执行类似的操作。

关于java - AEM - 用于查询生成器的 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53321993/

相关文章:

java - 从 WebElement 中提取定位器并使用 pagefactory

spring - 在 dao 单元测试之前生成数据库表

java - Spring 3.x 无法加载 applicationContext

java - 如何测试方法内部捕获的异常?

java - 如何从 Java 代码运行 Hadoop HDFS 命令

c# - 为什么 Iterator 定义 remove() 操作?

android - 如何使用 Mockito 模拟和验证方法中的回调

java - 作为结果返回模拟方法的参数

java - MVP 模式中的 Mockito 测试

java - 如何使用 Selenium 从不包括其子元素的元素中获取文本