我有一个facade类,它实现了以下方法:getTotalNumOfItems(Query query)
。外观站在另外两个服务类的前面,这两个服务类实现了相同的方法。根据{{1}}参数的类型,Facade决定是委托给其中一个服务还是另一个服务。
我的困境是如何为立面编写单元测试,而不必测试必须知道项目的数量是如何导出的。否则,它看起来像集成测试,而不再是单元测试。
我使用Mockito提供了两种服务的就地模拟版本。但是,当我为此编写单元测试时,我唯一可以测试的是"验证外观是否返回一个数字,等于其中一个模拟返回(取决于查询类型)"。似乎没有办法以比这更不可知的方式测试立面。
我在这里做错了吗?我应该感到担心吗?我想,立面的本质是这样的,它的效率只能通过了解它所代表的类来验证。当然,我确保在两种服务中为相同的方法编写单元测试。
答案 0 :(得分:4)
正如您已经说过,门面的责任是决定委托给哪个服务。这就是你需要测试的东西。该服务的返回值对测试无关紧要。因此,对于你的模拟,只需确保在一个测试用例中调用其中一个,而从不调用另一个。第二个测试用例应该反过来测试它。