我正在做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));
我不清楚发生了什么。
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] 删除。
我来说两句