【问题标题】:How to stub/mock XMLBeans object for testing?如何存根/模拟 XMLBeans 对象进行测试?
【发布时间】:2012-07-31 09:53:01
【问题描述】:

我正在处理使用 Apache XMLBeans 的应用程序(扩展 org.apache.xmlbeans.XmlObject 的 XML 结构元素的接口,扩展 org.apache.xmlbeans.impl.values.XmlComplexContentImpl 的那些接口的实现)

我得到了以下功能:

  • 一个 XML 对象被传递给一个包含一些数据的方法
  • 基于此数据,为此 XML 对象生成子内容
    • 使用 XML 对象的 addFoo() 添加元素等

现在我想对此功能进行测试,但我不确定让这个 XML 对象进行测试的最佳方法是什么(我希望存根/模拟对象保持子树状态为容易测试)。一些选项:

  • 我尝试实例化这些 FooImpl 实现对象,但它们需要引用 org.apache.xmlbeans.SchemaType sType
    • 有没有办法实例化这些?
    • 添加某些内容时,提供 null / mocked SchemaType 最终会导致 NPE
  • 使用少数需要的方法生成存根类是可行的,但最终会生成许多 (> 100) 个方法
  • 使用 Mockito 可以正常工作,但要轻松测试 xml 树结构状态,我需要使用 doAnswer() 等

一些想法?

br,图子

【问题讨论】:

    标签: java unit-testing mocking xmlbeans stubbing


    【解决方案1】:

    自己发现答案很简单:xmlbeans 接口有用于实例化 bean 的工厂类,例如:

    Address.Factory.newInstance()
    

    【讨论】:

      【解决方案2】:

      我知道这不是您正在寻找的答案,但无论如何它都在这里:

      不要模拟你无法控制的类型

      参考资料:

      问你一个问题:你想测试什么? Apache XML bean 是否按预期工作?还是您正在编写 XML 工具?

      【讨论】:

      • 好点。我正在尝试测试使用 XMLBeans 创建 XML 结构的业务功能。 (所以我希望 XMLBeans 能按预期工作)
      • 我希望我不会听起来不友好,但是如果您的业务逻辑关心 XML,那么您只能编写 XML 相关的工具。如果您正在编写任何其他应用程序,这意味着您已经将业务逻辑与将应用程序连接到外部世界的胶水代码混合在一起,您可能想了解如何将这两者分开。一个很好的参考是hexagonal architecture
      • 我对“业务功能”的使用不是很好。我正在测试的特定功能是生成的 XML 文档的一种“分页”,因此它处于业务逻辑和 XML 的边缘。
      猜你喜欢
      • 2016-08-18
      • 2019-08-22
      • 1970-01-01
      • 2015-08-30
      • 2019-02-09
      • 2021-08-26
      • 2023-04-04
      • 2013-02-07
      • 2016-12-30
      相关资源
      最近更新 更多