jUnit测试addAll方法

时间:2011-09-22 12:26:43

标签: java unit-testing junit arraylist

对于我的任务,我必须为该方法开发几个jUnit测试:

 addAll(int index, Collection c)

此方法是类ArrayList的一部分 - 内置于java。

我想出了如何创建测试并在Eclipse IDE中运行它们,但我对我应该如何开发测试感到有些困惑。我可以举例说明我应该在@before@beforeClass@after@test方法中包含哪些内容吗?

为了清楚说明,我理解方法的格式......我只是不明白如何测试这种方法。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#addAll(java.util.Collection

4 个答案:

答案 0 :(得分:4)

因此,您需要测试的是该方法在传递的Collection中插入所有元素,并将它们插入ArrayList中的适当位置。

想想所有可能的senerios并测试每一个。

  1. 以空arraylist开头
  2. 传递空集合
  3. 使用索引0
  4. 使用索引> 0
  5. 等等...
  6. 在添加之后,验证/断言ArrayList现在具有正确顺序/位置应具有的所有元素。

    还使用@Test测试错误情况(期望= ...)。

    1. index< 0
    2. index> arrayList.size()
    3. null collection
    4. 提出其他想法
    5. 此外...... 断言 Hamcrest的IsIterableContainingInOrder 结合使用将有助于验证。

答案 1 :(得分:3)

您需要考虑要测试的行为,然后创建一些使用@Test注释的方法来测试该行为的各个方面。想想addAll应该如何表现。例如,如果集合传递给它,索引为0,那么它应该在ArrayList的索引0中添加所有这些元素,然后是先前存在的对象。因此,在您的测试方法中,创建一个ArrayList,在其中粘贴一些对象,创建一个集合(c),在其中粘贴一些对象,在您的arrayList上使用索引0和集合(c)调用addAll,并声明它已完成应该怎么做......

(这只是一个例子,我不确定你的情况下addAll的预期行为是什么)

更好的看看维基百科文章Vakimshaar发布的:)

答案 2 :(得分:2)

坚持使用@Test和@Before Methods,其余的可能不是你需要的。

每次在执行带@Test注释的方法之前调用@Before注释的方法都会被调用。您可以使用它将东西初始化为干净状态,可以在多个测试之间共享。

一个起点可能是以下代码(更多案例要测试看看John的答案)并自己实现。

public class ArrayListTest {

    public ArrayList<String> list;

    @Before
    public void before() {
        // This the place where everything should be done to ensure a clean and
        // consistent state of things to test
        list = new ArrayList<String>();
    }

    @Test
    public void testInsertIntoEmptyList() {
        // do an insert at index 0 an verify that the size of the list is 1
    }

    @Test
    public void testInsertIntoListWithMultipleItems() {
        list.addAll(Arrays.asList("first", "second"));
        list.addAll(1, Arrays.asList("afterFirst", "beforeSecond"));

        // Verify that the list now contains the following elements
        // "first", "afterFirst", "beforeSecond", "second"
        List<String> theCompleteList = // put the expected list here
        // Use Assert.assertEquals to ensure that list and theCompleteList are indeed the same
    }
}

答案 3 :(得分:1)

使用注释@Test标记应返回void且不应接受参数的测试方法。

对于大多数用法来说,这已经足够了。但是,如果要在每次测试之前或之后运行特定代码,请使用实现适当的方法并使用@Before和@After注释标记它们。

如果需要在测试用例之前或之后运行的某些代码(实现多个测试的类),请使用@BeforeClass和@AfterClass方法注释适当的方法。注意这些方法必须是静态的,因此在测试用例的默认构造函数之前执行“before”方法事件。如果你愿意,也可以使用这个事实。