【问题标题】:Which is best in Java; Mocking interfaces or mocking classes?哪个在 Java 中最好;模拟接口还是模拟类?
【发布时间】:2012-04-27 15:13:32
【问题描述】:

首先,让我声明我不是 Java 开发人员,我目前使用 C# 进行开发,因此我对 Java 所做的任何假设或陈述都可能不正确或不知情。

在 .Net 中使用模拟对象编写单元测试时,99% 的时间我们模拟接口。可以模拟类,但您只能控制虚拟(因此可模拟)方法。

在 Java 中,由于默认情况下方法是虚拟的,所以我想模拟一个类与模拟一个接口是一样的,因为一切都将被模拟行为覆盖。

那么,在 Java 中依赖接口(并因此在单元测试中模拟接口)仍然是最佳实践,还是大多数 Java 开发人员使用类来减少类型的数量(不需要接口)?

【问题讨论】:

  • 这可能更适合programmers.stackexchange.com,但即使在那里也可能没有建设性。

标签: c# java unit-testing mocking


【解决方案1】:

我也会用 Java 模拟接口。我认为这就是整个想法:客户只知道接口引用类型。您可以在其背后注入一个模拟实现,而客户端并不聪明。

【讨论】:

    【解决方案2】:

    我实际上进行了相反的转换——即在 java 中进行模拟,然后转换到 csharp。我工作的公司传统上仍然模拟接口,如果具体确实有接口的话。否则,我们确实模拟了由于您指定的原因而起作用的实际类。所以,根据我的经验,由于明显的依赖原因,我们优先考虑接口。

    对于 java,我们选择了 Mockito 模拟框架,我认为它工作得很好。

    http://code.google.com/p/mockito/

    【讨论】:

      【解决方案3】:

      我推荐的另一个好框架是 EasyMock。

      http://easymock.org/

      它的学习曲线很低,我使用它时没有任何问题。

      【讨论】:

      • 感谢您的回复,但实际上并没有回答问题。我不是在寻找模拟框架,我不是第一句话中所述的 Java 开发人员:)
      【解决方案4】:

      试试 Mockito http://code.google.com/p/mockito/。非常简单而且功能强大!

      【讨论】:

      • 感谢您的回复,但实际上并没有回答问题。我不是在寻找模拟框架,我不是第一句话中所述的 Java 开发人员:)
      • 抱歉造成误会。您的问题的确切答案是:我个人尽可能地模拟接口。如果应该公开一些实现细节,则模拟一个类很有用。然而,这种情况应该包含在不同的测试套件中。所以模拟界面是要走的路。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2011-05-15
      • 1970-01-01
      相关资源
      最近更新 更多