关于junit:我们应该在接口(Java 8)中对默认方法进行单元测试吗?

Should we do unit testing for default methods in interfaces (Java 8)?

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


它取决于方法的复杂性。如果代码很琐碎,则不必这样做,例如:

1
2
3
4
5
6
public interface MyInterface {
    ObjectProperty<String> ageProperty();
    default String getAge() {
        return ageProperty().getValue();
    }
}

如果代码更复杂,那么您应该编写一个单元测试。例如,来自Comparator的这个默认方法:

1
2
3
4
5
6
7
8
9
10
11
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);
        };
    }
    ...
}

如何测试?

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

这已经被回答了。