在单元测试中检查工厂的结果

时间: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());

如果我们认为这可能会以某种方式失败(我无法想象),请进行两次验证。