在单元测试中检查工厂的结果
时间:2020-03-05 18:45:47 来源:igfitidea点击:
我已经开发了一些具有类似行为的类,它们都实现相同的接口。我实现了一个工厂,该工厂创建适当的对象并返回接口。我正在为工厂编写单元测试。我们所获得的只是对象的接口。
测试工厂正常工作的最佳方法是什么?
我想知道Java的答案,但是如果有一种跨语言的解决方案,我想知道。
答案中的数字2会像其他答案一样吗?如果是这样,我也将标记另一个接受的答案,并将我的问题改写为既解决了返回接口的工厂,又不知道实现该接口的具体类的类型,以及我们确实知道具体的类的情况用过的。
解决方案
回答
由于我不知道工厂方法是什么样子,所以我现在只能建议
- 检查对象是否为我们想要的正确的具体实现:
IMyInterface fromFactory = factory.create(...); Assert.assertTrue(fromFactory instanceof MyInterfaceImpl1);
- 我们可以检查工厂是否使用有效的实例变量设置了具体实例。
回答
if (myNewObject instanceof CorrectClass) { /* pass test */ }
更新:
不知道为什么记下来了,所以我将其扩展一下...
public void doTest() { MyInterface inst = MyFactory.createAppropriateObject(); if (! inst instanceof ExpectedConcreteClass) { /* FAIL */ } }
回答
@ cem-catikkas我认为比较getClass()。getName()值会更正确。在MyInterfaceImpl1类是子类的情况下,测试可能会失败,因为该子类是MyInterfaceImpl1的instance。我将重写如下:
IMyInterface fromFactory = factory.create(...); Assert.assertEquals(fromFactory.getClass().getName(), MyInterfaceImpl1.class.getName());
如果我们认为这可能会以某种方式失败(我无法想象),请进行两次验证。