gpt4 book ai didi

java - 我应该如何继承测试以避免定义测试数据的冗余?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:17 25 4
gpt4 key购买 nike

最初,我编写了一个类(我们称之为 RangeSet),它在 ArrayList 区间上运行(我将区间类定义为两个 Long 值)。该列表是间隔的集合,有一个 void add(Range range) 方法检查列表中是否存在与间隔的重叠、覆盖、包含或邻接。重点是保存非重叠间隔列表。

我为该类(class)设计并编写了大量测试,检查可能发生的各种情况。这就是我所说的大量代码。

现在事实证明(无论出于何种原因)我不得不将该类拆分为两个单独的类 - RangeSet 将是一个抽象类,具有几个有用的方法并从它继承 - ArrayRangeSet(保存 ArrayList 中的区间集合)和 TreeRangeSet(保存 TreeSet 中的区间集合)。 add(Range range) 方法的实现在这两者之间有很大不同。

我应该如何继承测试以避免在定义测试数据时出现冗余?

示例测试如下所示:

@Test
void testCase4(){
RangeSet set = new RangeSet();
Range r1 = new Range(4, 5);
Range r2 = new Range(13, 15);
Range r3 = new Range(19, 22);
set.add(r1);
set.add(r2);
set.add(r3);

Range testRange = new Range(11,100);
set.add(testRange);

assertEquals(2,set.iterator().size());
assertEquals(new Range(4,5),set.iterator().getAt(0));
assertEquals(new Range(11,100),set.iterator().getAt(1));
}

我不知道我是否说清楚了:有很多测试数据定义,这两个类的测试看起来是一样的。我该如何解决?

编辑:有没有办法将这些断言语句传递给继承的测试类?毕竟,那些 add 方法应该实现相同的目标,尽管是通过不同的操作。

最佳答案

您可以使用夹具方法,例如 JUnit @Before .或者您可以将其保存在单独的 fixture class 中.或者,如果适合的话,您可能希望将其保存在属性文件中。我的意思是有多种选择。

那种固定装置对我来说听起来不像 parent 。我的意思是夹具和测试类之间没有 is a 关系。顺便说一句,让基类处理两个测试类之间的共性没有什么坏处。如果您决定使用基类,您可以在那里使用 setup,或者说 /@Before 方法,它在一个地方准备数据。

关于java - 我应该如何继承测试以避免定义测试数据的冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com