我们有一项业务需求,我们要通过特定路径查询一组资产,并将过期的资产从一个文件夹移动到存档文件夹, 我们如何为下面的代码编写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吗?
答案 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
方法中作用于任何对象的事物,都可以执行类似的操作。