Java JUnit返回int值

Java JUnit返回int值,java,testing,junit,Java,Testing,Junit,我的JUnit测试应该检查返回的数字是否与列表大小相同 如果我的测试如下所示,那么代码是否正确?我觉得不是,因为最后两行永远都是真的?(抱歉,如果这没有意义!) public void testGetTotalPilots(){ 最终ArrayList=新ArrayList(); final int size=list.size(); 断言大小==list.size(); } 我不能说你的测试是正确的 public void testGetTotalPilots() { final Ar

我的JUnit测试应该检查返回的数字是否与列表大小相同

如果我的测试如下所示,那么代码是否正确?我觉得不是,因为最后两行永远都是真的?(抱歉,如果这没有意义!)

public void testGetTotalPilots(){
最终ArrayList=新ArrayList();
final int size=list.size();
断言大小==list.size();
}

我不能说你的测试是正确的

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

    assert size == list.size();
}
public void testGetTotalPilots(){
最终ArrayList=新ArrayList();
最终整数大小=0;
断言大小==list.size();
}

上面的更改将确保您的测试始终为零,因为这似乎是预期的结果。如果不为零,测试将失败。

您可以在创建列表时测试列表是否为空(
size==0
):

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

在单元测试列表(
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());
}
public void testGetTotalPilots()
{
ArrayList=新建ArrayList();
//调用填充引导列表的代码
int size=3;//将其设置为预期的数字
assertEquals(size,list.size());
}

…否则您就不会测试任何东西。

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

看一下测试的名称,这个测试应该从其他地方获取列表,然后测试关于飞行员列表的假设。类似于

List<Pilot> pilots = pilotDao.getAll();
assert pilots.size() == 0;

Pilot newPilot = new Pilot();
pilotDao.addPilot(newPilot );

pilots = pilotDao.getAll();
assert pilots.size() == 1;
assert pilots.get(0).equals(newPilot);
List pilots=pilotDao.getAll();
assert pilots.size()==0;
Pilot newPilot=新Pilot();
pilotDao.addPilot(newPilot);
pilots=pilotDao.getAll();
assert pilots.size()==1;
断言pilots.get(0).equals(newPilot);
或者,正如我在你的另一篇文章中所说的,这样做; List pilots=pilotDao.getAll(); 飞行员。添加(新飞行员)
然后检查是否对此做出了正确的反应,即,如果您不希望人们修改列表或后续调用
pilotDao.getAll(),则会引发异常
返回大小为1的列表。

assert
是一种java语言功能,不用于测试。仅使用运行时选项
-ea
对其进行评估!如果没有该选项,您的代码将不会进行任何测试!请使用
junit.framework.Assert
的方法,如
assertEquals()


另一方面,我不确定你的测试应该测试什么。list.size()始终是list.size()。你应该声明一个数字。另外,您不需要测试ArrayList—它可以工作。您的代码要测试在哪里?

是的,最初的问题只是测试Java ArrayList API是否正常工作-假设它正常工作可能是安全的。您使用了错误的断言-这是内置的Java关键字,而不是Junit assert类。应该是Assert.Equals(size,list.size());或者使用TestNG而不是JUnit,其中使用
assert
是有效的。这可能适用于JUnit,但还有其他测试框架。例如,在TestNG中,断言是声明断言的首选方式,请参见问题以“My Junit test”开头。TestNG还有一个自己的断言类(org.TestNG.Assert),文档中还提供了一些注释,以使断言能够使测试工作。
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());
}
List<Pilot> pilots = pilotDao.getAll();
assert pilots.size() == 0;

Pilot newPilot = new Pilot();
pilotDao.addPilot(newPilot );

pilots = pilotDao.getAll();
assert pilots.size() == 1;
assert pilots.get(0).equals(newPilot);