Junit测试5(异常)

佩德罗·马丁内斯(Pedro Martinez):

我正在做Junit测试,在其中一项测试中,我遇到了问题,但我不明白为什么。

您不必在任何给定时间允许将更多对象添加到列表中,列表的大小大于5,总之,如果我将第六个对象添加到列表中,则必须跳过该异常,但是我不明白为什么它不起作用的原因,我留下了我正在做的代码。

码:

 @Test
 void testAddTank() throws KeeperException, TankException {  
  List<Tank> NumTanques = new ArrayList<Tank>();

  Tank tank1 = new Tank("TANQUE1","pedro1","hola",3.0,2.0,1.0,"/image",17.0,7);
  Tank tank2 = new Tank("TANQUE2","pedro2","hola",3.0,2.0,1.0,"/image",17.0,7);
  Tank tank3 = new Tank("TANQUE3","pedro3","hola",3.0,2.0,1.0,"/image",17.0,7);
  Tank tank4 = new Tank("TANQUE4","pedro4","hola",3.0,2.0,1.0,"/image",17.0,7);
  Tank tank5 = new Tank("TANQUE5","pedro5","hola",3.0,2.0,1.0,"/image",17.0,7);
  Tank tank6 = new Tank("TANQUE6","pedro6","hola",3.0,2.0,1.0,"/image",17.0,7);
  Tank tank7 = new Tank("TANQUE7","pedro6","hola",3.0,2.0,1.0,"/image",17.0,7);

  NumTanques.add(tank1);
  NumTanques.add(tank2);
  NumTanques.add(tank3);
  NumTanques.add(tank4);
  NumTanques.add(tank5);

  assertEquals(5, NumTanques.size());

  KeeperException excepcionTanques = assertThrows(KeeperException.class,()->NumTanques.add(tank6));
  assertEquals("[ERROR] A keeper cannot care of more than 5 
  thanks!!",excepcionTanques.MSG_ERR_MAX_TANKS);

}

如您所见,我创建了tank类型的列表并创建了一些tank对象,并将其添加到列表中。然后用断言我告诉你的是5必须是列表的大小,以便它返回true ...

然后,在我创建的异常中,我向列表中添加了一个新的tank,该异常应该跳转,但是没有跳转,它退出并在行上给出错误:

 KeeperException excepcionTanques = assertThrows(KeeperException.class,()->NumTanques.add(tank6));

我不清楚发生了什么。

Kunal Vohra:

Arraylist如果添加任何内容,为什么会抛出异常。它有自己的算法来管理加法。

您需要做的是在service类中添加一个方法(也许KeeperService.java

并在那里抛出异常。就像是

@sneakyThrows
public void countKeeperCheck(Object o){

List<Tank> NumTanques = new ArrayList<Tank>();
NumTanques.add(o);

if(listOfBanks.size() >5){
throw new KeeperException("write whatever here")
}
}

//add to try/catch if you have specific things to handle

您可以从测试中调用该方法。您不能在测试中编写业务逻辑。从测试中,您调用保存业务逻辑的方法。

----------------在注释后编辑和详细代码-----------------

public void addTank(List<Tank> tank) throws KeeperException{// in the comment you add wrong signature, method should accept List, the only you will have contains operation

        if(tanks.size()>=5){
        throw new KeeperException(KeeperException.MSG_ERR_MAX_TANKS);
        }

        if(!tanks.contains(tank)){
            tanks.add(tank);
    }
}


// and this is how your test will look like
@Test
 void testAddTank() throws KeeperException, TankException {
         List<Tank> NumTanques = new ArrayList<Tank>();

        Tank tank1 = new Tank("TANQUE1","pedro1","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank2 = new Tank("TANQUE2","pedro2","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank3 = new Tank("TANQUE3","pedro3","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank4 = new Tank("TANQUE4","pedro4","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank5 = new Tank("TANQUE5","pedro5","hola",3.0,2.0,1.0,"/image",17.0,7);
        Tank tank6 = new Tank("TANQUE6","pedro6","hola",3.0,2.0,1.0,"/image",17.0,7);

        NumTanques.add(tank1);
        NumTanques.add(tank2);
        NumTanques.add(tank3);
        NumTanques.add(tank4);
        NumTanques.add(tank5);


        KeeperException excepcionTanques = assertThrows(KeeperException.class,()->yourServiceClass.addTank(tank6));
        assertEquals("[ERROR] A keeper cannot care of more than 5  thanks!!",excepcionTanques.MSG_ERR_MAX_TANKS);
        }

声明YourServiceClass您想要的方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章