gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:35:27 25 4
gpt4 key购买 nike

我们有一个业务需求,我们通过特定路径查询一组 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com