【问题标题】:Unit testing a facade class单元测试外观类
【发布时间】:2015-04-09 01:33:13
【问题描述】:

我有一个外观类,它实现了以下方法:getTotalNumOfItems(Query query)。门面位于其他两个服务类的前面,它们实现了相同的方法。根据query 参数的类型,外观决定是委托给其中一个服务还是另一个。

我的困境是如何为外观编写单元测试,而测试不必知道项目数是如何得出的。否则,它看起来就像一个集成测试,而不是一个单元测试。

我使用 Mockito 提供了这两个服务的就地模拟版本。但是,当我为此编写单元测试时,我唯一可以测试的是“验证外观是否返回一个数字,等于其中一个模拟返回的数字(取决于查询类型)”。似乎没有办法以比这更不可知的方式测试外观。

我在这里做错了吗?我应该感到担心吗?我想,外观的本质是,它的效率只能通过了解它委托给的类来验证。当然,我确保在两个服务中为相同的方法编写单元测试。

【问题讨论】:

  • 您需要测试单个服务对象而不是外观本身。
  • 所以我做到了。然而,我想确保外观总是决定委派给正确的服务
  • 不,您不应该这样做,否则您没有做 UT。 UT 只是类和特定方法。

标签: java unit-testing mockito facade


【解决方案1】:

正如你已经说过的,外观的职责是决定委托给哪个服务。这就是你需要测试的。服务的返回值与测试无关。因此,对于您的模拟,只需确保在一个测试用例中调用其中一个,而从不调用另一个。第二个测试用例应该反过来测试它。

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多