对于我的任务,我必须为该方法开发几个jUnit测试:
addAll(int index, Collection c)
此方法是类ArrayList
的一部分 - 内置于java。
我想出了如何创建测试并在Eclipse IDE中运行它们,但我对我应该如何开发测试感到有些困惑。我可以举例说明我应该在@before
,@beforeClass
,@after
,@test
方法中包含哪些内容吗?
为了清楚说明,我理解方法的格式......我只是不明白如何测试这种方法。
答案 0 :(得分:4)
因此,您需要测试的是该方法在传递的Collection中插入所有元素,并将它们插入ArrayList中的适当位置。
想想所有可能的senerios并测试每一个。
在添加之后,验证/断言ArrayList现在具有正确顺序/位置应具有的所有元素。
还使用@Test测试错误情况(期望= ...)。
此外...... 断言与 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”方法事件。如果你愿意,也可以使用这个事实。