【问题标题】:Mock/Fake a Repository (or populate a FormMap without persistFormMap)模拟/伪造存储库(或填充没有 persistFormMap 的 FormMap)
【发布时间】:2014-10-02 15:02:17
【问题描述】:

我正在为 HippoCMS 的组件编写单元测试,但是我无法解决如何伪造 Repository 对象来模拟 persistFormMap 数据。

我遵循了基本的 HST-2 表单建议来实际检索请求数据 (http://www.onehippo.org/library/concepts/component-development/hst-2-forms.html),但是我还没有找到一种简单的方法来模拟/伪造 getWritableSession 的 Repository 部分(从 persistFormMap() 调用)到放入一个虚假的组件管理器中。

public static Session getWritableSession() throws RepositoryException { if (HstServices.isAvailable()) { Credentials defaultCredentials = HstServices.getComponentManager().getComponent(Credentials.class.getName() + ".writable"); Repository repository = HstServices.getComponentManager().getComponent(Repository.class.getName()); Session session = null; if (repository != null) { if (defaultCredentials != null) { session = repository.login(defaultCredentials); } else { session = repository.login(); } } return session; }

有没有办法在没有persistFormMap() 的情况下获取提交的数据?或者一种正确伪造 repo 的方法(希望不是我在文档中简单查看的内容)。

【问题讨论】:

    标签: java unit-testing hippocms


    【解决方案1】:

    在测试套件的设置方法中,您可以设置组件管理器 HstServices.setComponentManager(componentManager) 确保 componentmanager 是一个模拟。现在您可以控制它返回的内容。这可能需要一些嘲笑,这是不幸的。

    确保在拆解时将组件管理器设置为 null,因为它是一个静态类,可能会导致同一套件中的测试出现问题。

    【讨论】:

    • 嗨碧玉,感谢您的回答!不幸的是,我已经设置了一个 MockComponentManager(),问题是我无法将 Repository 组件添加到 MockComponentManager,因为它在 getWritableSession 的“if (repository != null) {”行返回 null。
    • 你的测试框架是什么?如果您使用的是 MockComponentManager 类,则需要向组件添加存储库。您还可以使用您正在使用的任何测试框架中的模拟。例如,在 mockito 中,您只需要使用 @Mock 进行注释。或任何组合。
    • 嘿,Jasper,抱歉花了一段时间才回复...最后我只是简单地选择了 Mockito,因为它使所有东西都更容易模拟(静态也是如此)所以基本上我只是在测试那是我的东西,而不是 CMSHippos!感谢您的回复,因为它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2022-01-09
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多