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

时间:2018-11-02 19:46:31

标签: junit aem

我正在创建一个吊索模型,该模型从文件中提取一个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 **/
    }
}

在AEM中,它工作正常,但是当我尝试将其与WCM.io AEM模拟框架一起使用时,assetManager返回null

@Test
public void checkIfFileIsRead() {
    context.load().binaryFile(COURSES_EXCEL_FILE, EXCEL_RESOURCE_PATH);
    context.load().json(ONLINE_COURSE_LISTING_AUTHORED, TEST_CONTENT_ROOT);
    resource = context.request();
    undertest = resource.adaptTo(OnlineCoursesModel.class);

    System.out.println(undertest);
}

1 个答案:

答案 0 :(得分:1)

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

@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,并且模仿类型为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 **/
    }
}