静态工厂方法和模拟

Rok*_*okL 5 java testing tdd unit-testing

你如何使用静态工厂方法和模拟协调?

很多人只会说:不要使用静态工厂方法,而是使用DI.

好吧,有时你无法避免静态工厂方法.考虑以下用例,应该是熟悉的:

想象一下,你有一个叫做Optionscala的类.如果要为所有缺失值重用相同的实例,则无法避免使用静态工厂方法.

一旦你去new Option(null)创建一个新的选项对象,你就不能一遍又一遍地返回同一个对象.

类似的用例是Integer.valueOf()将重用整数对象用于低于128的值.不使用静态工厂方法是不可能的.

另一个优点是工厂方法比new关键字更具描述性.

那么你们如何处理必须使用静态工厂方法并同时想要使用继承和模拟?

谢谢.

JFP*_*ard 2

既然是理论问题,那我就从理论上回答一下。工厂范式是另一个理论的构建点:注入。如果您创建的对象在需要时注入,那么您只需注入模拟对象即可完成所有测试。有很多好书/网页可以帮助您开始这方面的工作。