Junit 使用WCM IO模拟AEM资产管理器

Junit 使用WCM IO模拟AEM资产管理器,junit,aem,Junit,Aem,我正在创建一个sling模型,该模型从文件中获取一个excel文件,以读取和显示AEM组件中的数据 @Model( adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL ) public class OnlineCoursesModel { @Self private SlingHttpServletReq

我正在创建一个sling模型,该模型从文件中获取一个excel文件,以读取和显示AEM组件中的数据

@Model(
    adaptables = SlingHttpServletRequest.class, 
    defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
)
public class OnlineCoursesModel {

    @Self
    private SlingHttpServletRequest request;

    @ValueMapValue
    private String filePath;

    private List<OnlineCourseDTO> onlineCourses;

    @PostConstruct
    public void init() {
        AssetManager assetManager = request.getResourceResolver().adaptTo(AssetManager.class);
        Asset asset = assetManager.getAsset(filePath);

        /** Do Something With the Asset **/
    }
}

你的测试有点太复杂了。你能试试这个简单的版本吗

@Test
public void checkIfFileIsRead() {
    context.create().asset("/content/dam/image.jpg", 1, 1, StandardImageHandler.JPEG_MIMETYPE);
    undertest = context.request().adaptTo(OnlineCoursesModel.class);

    assertNotNull(undertest);
}
这将在
/content/dam/image.jpg
处创建一个新资产,其宽度为
1
,高度为
1
,mime类型为
image/jpg

您不需要加载二进制和其他json

附加注释

您也不需要根据请求进行调整。这被认为是不好的做法,只有在您需要特定信息时才应该这样做,而这些信息只是请求的一部分。例如,有关发送请求的用户的信息

否则,请始终从
Resource.class
进行调整

例如:

@Model(adaptables = Resource.class)
public class OnlineCoursesModel {

    @OSGiService
    private AssetManager assetManager;

    @PostConstruct
    public void init() {
        Asset asset = assetManager.getAsset(filePath);

        /** Do Something With the Asset **/
    }
}
@Model(adaptables = Resource.class)
public class OnlineCoursesModel {

    @OSGiService
    private AssetManager assetManager;

    @PostConstruct
    public void init() {
        Asset asset = assetManager.getAsset(filePath);

        /** Do Something With the Asset **/
    }
}