首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单元测试中检查工厂的结果

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

Stack Overflow用户
提问于 2008-09-01 00:40:04
回答 5查看 23.6K关注 0票数 22

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

我想知道Java语言的答案,但如果有跨语言的解决方案,我想知道它。

第二,在答案中,会像另一个答案一样做吗?如果是这样,我也会将另一个答案标记为已接受,并重新编写我的问题,以说明返回接口的工厂和您不知道实现该接口的具体类类型的工厂,以及您确实知道使用了哪个具体类的情况。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-01 00:47:23

因为我不知道你的工厂方法是什么样的,所以我现在能建议的就是

  1. 检查以查看对象是否为您正在寻找的正确的具体实现:

MyInterfaceImpl1);

  • You的IMyInterface fromFactory = factory.create(...);Assert.assertTrue(fromFactory实例可以检查工厂是否使用有效的实例变量设置了具体实例。
票数 23
EN

Stack Overflow用户

发布于 2015-12-10 18:14:34

您要做的不是单元测试

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

在单元测试中,您只需要测试对象本身。如果对返回的抽象对象的具体类型进行断言,则是在测试返回对象的实现。

一般的对象单元测试

在进行单元测试时,您需要断言四件事:

  1. 查询的返回值(非be.
  2. Side-effects方法)是您期望它们对命令(void方法)的返回值。按您期望的方式修改对象本身。接收发送到其他对象的
  3. 命令(这通常是使用
  4. 完成的)。

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

单元测试工厂

对工厂进行单元测试真的没什么意思,因为你对queries的返回对象的行为不感兴趣。该行为(希望)在其他地方进行测试,可能是在对对象本身进行单元测试时。您真正感兴趣的只是返回的对象是否具有正确的类型,如果您的程序编译成功,这一点是可以保证的。

由于工厂不会随着时间的推移而改变(因为这样它们将成为"Builders",这是另一种模式),因此没有命令可供测试。

工厂负责实例化对象,因此它们不应该依赖其他工厂来完成这项工作。它们可能依赖于生成器,但即便如此,我们也不应该测试生成器的正确性,只测试生成器是否接收到消息。

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

单元测试工厂摘要

  1. 既不测试返回对象的行为,也不测试其实现细节!无论是否收到发送给依赖项的命令,您的工厂都不负责对象instances!
  2. Test的实现。

就这样。如果没有依赖项,就没有什么需要测试的了。可能只是断言返回的对象不是null引用。

集成测试工厂

如果您要求返回的抽象对象类型是特定具体类型的实例,则需要进行集成测试。

这里的其他人已经回答了如何使用instanceof操作符来实现这一点。

票数 44
EN

Stack Overflow用户

发布于 2008-09-01 00:49:19

代码语言:javascript
复制
if (myNewObject instanceof CorrectClass)
{
    /* pass test */
}

更新:

不知道为什么这会被减记,所以我会稍微扩展一下...

代码语言:javascript
复制
public void doTest()
{
    MyInterface inst = MyFactory.createAppropriateObject();
    if (! inst instanceof ExpectedConcreteClass)
    {
        /* FAIL */
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档