【发布时间】:2020-05-21 15:09:17
【问题描述】:
我在 IAdder.java 中有以下代码:
public interface IAdder {
int add(int a, int b);
}
然后是以下实现(一个在 SimpleAdder.java 中,另一个在 AbsAdder.java 中):
public class SimpleAdder implements IAdder {
@Override
public int add(int a, int b) {
return a+b;
}
}
public class AbsAdder implements IAdder {
@Override
public int add(int a, int b) {
return Math.abs(a) + Math.abs(b);
}
}
现在我想用 Junit5 进行测试,所以我开始在 SimpleAddertest.java 中编写以下内容:
import org.junit.jupiter.api.Test;
导入静态 org.junit.jupiter.api.Assertions.*;
类 SimpleAdderTest {
IAdder ia = new SimpleAdder();
@Test
void add() {
assertEquals(10, ia.add(7, 3));
}
}
为了测试 AbsAdder,我可以添加以下测试类 AbsAdderTest:
import org.junit.jupiter.api.Test;
导入静态 org.junit.jupiter.api.Assertions.*;
类 AbsAdderTest {
IAdder ia = new AbsAdder();
@Test
void add() {
assertEquals(10, ia.add(7, 3));
}
}
在 Junit5 中避免这种代码重复的最佳方法是什么?我在 SO 上看过其他帖子,但没有人以简单的方式回答这个简单的问题。
【问题讨论】:
-
什么代码重复?它们是两种不同的实现,因此您需要测试这两个用例。同样,您需要在两者中测试
add(-5,-7),但结果不同。 -
我认为这不能称为代码重复,因为您正在测试不同的实现。将来可能会有另一种实现,不会给出 7+3=10。