当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在单元测试中检查工厂的结果》经验,为你挑选了2个好方法。

我开发了一些具有类似行为的类,它们都实现了相同的接口.我实现了一个工厂,它创建适当的对象并返回接口.我正在为工厂写一个单元测试.你得到的只是对象的接口.测试工厂工作正常的最佳方法是什么?

我想知道Java中的答案,但如果有一个跨越语言的解决方案,我想知道它.

答案中的第2号将像其他答案一样完成吗?如果是这样,我将标记另一个接受的答案并重新提出我的问题,以解决返回界面的工厂以及您不知道哪种类型的具体类实现了界面,以及您知道具体类是什么的情况用过的.



1> Undreren..:
你要做的不是单元测试

如果测试返回的对象是否是特定具体类的实例,则不进行单元测试.你是集成测试.虽然集成测试很重要,但它不是一回事.

在单元测试中,您只需要测试对象本身.如果断言返回的抽象对象的具体类型,则表示您正在测试返回对象的实现.

一般对象的单元测试

在单元测试时,有四件事,你要断言:

    查询的返回值(非void方法)是您期望的.

    命令的副作用(void方法)按照您的预期修改对象本身.

    收到发送到其他对象的命令(通常使用模拟完成).

此外,您只想测试从对象实例(即公共接口)可以观察到的内容.否则,您将自己绑定到一组特定的实现细节.这将要求您在这些细节发生变化时更改测试.

单元测试工厂

对Factories进行单元测试真的很无趣,因为您对返回的查询对象的行为不感兴趣.这种行为(希望)可以在其他地方进行测试,可以在对象本身进行单元测试时进行测试.您只对退回的对象是否具有正确的类型感兴趣,如果您的程序编译,则保证该类型.

由于工厂不随时间而改变(因为那时它们将是"建造者",这是另一种模式),因此没有可测试的命令.

工厂负责实例化对象,因此他们不应该依赖其他工厂为他们做这件事.它们可能依赖于构建器,但即便如此,我们也不应该测试构建器的正确性,只测试构建器是否收到消息.

这意味着您必须在Factories上测试的是他们是否将消息发送到它们所依赖的对象.如果使用依赖注入,这几乎是微不足道的.只需在单元测试中模拟依赖项,并验证它们是否收到消息.

单元测试工厂总结

    不要测试返回对象的行为和实现细节!您的工厂不负责实施对象实例!

    测试是否收到发送到依赖项的命令.

而已.如果没有依赖关系,则无需测试.除了可能断言返回的对象不是null引用.

集成测试工厂

如果您要求返回的抽象对象类型是特定具体类型的实例,那么这属于集成测试.

这里的其他人已经使用instanceof操作员回答了如何做到这一点.



2> Cem Catikkas..:

由于我不知道您的工厂方法是什么样的,我现在可以建议的是

    检查对象是否是您正在寻找的正确的具体实现:

    IMyInterface fromFactory = factory.create(...);  
    Assert.assertTrue(fromFactory instanceof MyInterfaceImpl1);
    

    您可以检查工厂是否使用有效的实例变量设置具体实例.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有