【问题标题】:Should we do unit testing for default methods in interfaces (Java 8)? [closed]我们应该对接口(Java 8)中的默认方法进行单元测试吗? [关闭]
【发布时间】:2014-09-16 09:49:48
【问题描述】:

我对 Java 8 中引入的接口中的默认方法实现感到有些困惑。我想知道我们是否应该专门为接口及其实现的方法编写 JUnit 测试。我试图用谷歌搜索它,但我找不到一些指导方针。请指教。

【问题讨论】:

  • 为什么您认为非default 方法有什么不同?你有没有在网上找到任何东西说你不应该测试default 方法? static 方法怎么样?
  • 不要对技术主题的“角色”进行哲学思考。单元测试的基本思想是,如果你有一段具有一定复杂性的代码,就为它编写测试代码。观点。这就是为什么它被称为“单元测试”而不是“具体(非interface)类测试”。除此之外的一切都“主要基于意见”,是结束问题的理由。
  • @Holger 您可以将所有这些写下来作为查看该问题的 6k 人的答案。实际上,下面答案中的链接对我很有用。而你的“关闭”是基于意见的。

标签: unit-testing junit java-8 default-method


【解决方案1】:

这取决于方法的复杂性。如果代码很琐碎,则没有必要,例如:

public interface MyInterface {
    ObjectProperty<String> ageProperty();
    default String getAge() {
        return ageProperty().getValue();
    }
}

如果代码比较复杂,那么你应该编写一个单元测试。比如这个默认方法来自Comparator

public interface Comparator<T> {
    ...
    default Comparator<T> thenComparing(Comparator<? super T> other) {
        Objects.requireNonNull(other);
        return (Comparator<T> & Serializable) (c1, c2) -> {
            int res = compare(c1, c2);
            return (res != 0) ? res : other.compare(c1, c2);
        };
    }
    ...
}

如何测试?

从接口测试默认方法与测试抽象类相同。

This has already been answered.

【讨论】:

  • @user998692 逻辑完全一样。创建一个模拟实现,最低限度地实现所需的方法并测试默认方法。不应使用框架模拟 CUT。
  • “它基本上是一个契约,它根本不包含实现。”这不再是真的,因为有默认方法。而且你不需要一个测试框架来编写一个模拟实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 2020-05-30
  • 1970-01-01
相关资源
最近更新 更多