2009-12-21 56 views
0

我的JUnit测试应该检查返回的数量是一样的列表大小的JUnit返回int值

如果我的测试结果如下请问这是正确编码,我觉得它不是因为我最后两行总会是真的吗?

public void testGetTotalPilots() { 
    ArrayList<Pilot> list = new ArrayList<Pilot>(); 
    int size = list.size(); 

    assert size == list.size(); 
} 
+0

您正在使用错误的断言 - 这是内置的Java关键字,而不是Junit Assert类。应该是Assert.Equals(size,list.size()); – Paolo 2009-12-21 09:40:42

+0

或者使用TestNG代替JUnit,其中使用'assert'有效 – 2009-12-21 09:53:26

回答

0

我不会说你的测试是正确的。

public void testGetTotalPilots() { 
    ArrayList<Pilot> list = new ArrayList<Pilot>(); 
    int size = 0; 

    assert size == list.size(); 
} 

上面的变化将确保您的测试总是会为零,因为看起来像预期的结果。如果它不是零,那么测试将失败。

3

你可以测试,例如,列表是否为空(大小== 0)时,该列表的创建:

ArrayList<Pilot> list = new ArrayList<Pilot>(); 
assertEquals(0, list.size()); 
// or: assertTrue(list.isEmpty()); 

和/或你可能有些条目添加到列表中,检查是否列表的大小相应地设置:

list.add(pilot1); 
list.add(pilot2); 
assertEquals(2, list.size()); 

编辑:

当单元测试列表(ArrayList),你应该想想该列表可以如何使用(测试场景)。例如,

  • 创建列表时,它应该是空
  • ,当一个项目被添加到一个空列表,它的大小应该是一个(事后)
  • 当列表包含了一个项目,除去这个项目应该是一个空列表
  • 等等...
1

当然你的测试首先需要做的事情,即触发您正在测试填充试点对象的ArrayList中的代码?所以,你会按如下方式编码你的测试:

public void testGetTotalPilots() 
{ 
    ArrayList<Pilot> list = new ArrayList<Pilot>(); 
    // Invoke the code that populates the Pilot list 
    int size = 3; // Set this to the expected number 

    assertEquals(size, list.size()); 
} 

......否则你只是没有测试任何东西。

+0

是的,原始问题只是测试Java ArrayList API是否工作正常 - 假设它可能是安全的。 – cyborg 2009-12-21 09:38:00

0

你在这里测试的是ArrayList。为什么?我认为花时间测试Java附带的类的基本功能并且它们被广泛使用并不是特别有用。

看着测试的名字,这个测试应该从其他地方得到列表,然后测试关于飞行员列表的假设。或者,正如我在你的其他文章中所说的那样, List pilots = pilotDao.getAll(); pilots.add(新Pilot) 然后检查是否对此发生了正确的反应,例如,如果不希望人们修改列表或随后调用pilotDao.getAll();返回大小为1的列表,则会引发异常。

3

assert是不能在测试中使用的Java语言功能。它仅通过运行时选项-ea进行评估!没有这个选项,你的代码不会测试请使用junit.framework.Assert的方法,如assertEquals()

另一方面,我不确定,你的测试应该测试什么。 list.size()总是list.size()。你应该断言一个数字。你也不需要测试ArrayList - 它可以工作。你的代码在哪里测试?

+0

这可能适用于JUnit,但还有其他测试框架。例如,在TestNG中,断言是声明断言的首选方式,请参阅http://testng.org/doc/documentation-main.html#success-failure – 2009-12-21 09:48:35

+0

问题始于“我的Junit测试”。另外TestNG还有一个自己的断言类(org.testng.Assert),文档中还提供了断言来使测试工作。 – 2009-12-21 10:49:55