您好我正在为一个程序编写单元测试用例。在那个程序中,我正在测试一个特定的方法,即它是这个方法:Collections.sort(Arraylist object)。 它是这样的。
public void abc(){
try{
Arraylist<object_class> object=some_method.get(list);
Collections.sort(object);
System.out.print("The whole functon is executing successfully") }
catch(exception e) {
system.out.print("error message") } }
我调用的some_method.get(list)`方法正在发送一个空列表,所以当调用Collections.sort()时,它会进入catch块而其余代码不会被执行。 我可以做什么,以便在测试用例运行时不调用此Collections.sort()方法。
PS-以上代码仅用于解释问题,我无法对主类进行更改
在测试类中,我尝试使用此方法
Mockito.doNothing()。when(collections.sort(Mockito.anyList())); //这不起作用
所以我尝试了这个Mockito.doNothing()。when(collections.class).sort(Mockito.anyList()); //这也不起作用
我可以将一个模拟列表返回给object,但我想知道是否可以阻止Collections.sort()执行。
请帮忙
答案 0 :(得分:2)
如果您想要执行Collections.sort()而没有任何异常,请执行以下步骤:
1)在测试类中创建一个带有虚拟值的列表对象,并将其发送到主类
list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
2)第二步是确保你的
some_method.get(list);
返回一个对象的ArrayList,
3)由于Collections类具有静态方法排序,JVM将像往常一样执行其余代码。并且不会通过任何例外。
PS-如果Mockito.doNothing()不起作用尝试PowerMockito.doNothing(),它可能会起作用并确保你有
1)@PrepareforTest(Collections.class)
2)PowerMockito.mockStatic(Collections.class);
3)PowerMockito.doNothing()。when(Collections.sort(obj));
希望它有用。
答案 1 :(得分:1)
这在许多层面都是错误的:
换句话说:只有两个合理的选择:
A)如果实际上,该方法从不返回null。那么你应该确保你的测试设置也是如此。
B)如果实际上,该方法也返回null ...那么你的生产代码需要处理它,例如在调用sort之前进行空检查!
最后:特别是对于列表,这个问题确实根本不存在:答案是 - 你永远永远不会返回null!相反,如果没有数据,则返回空列表。可以对空列表进行排序而不会出现问题!长话短说:首先避免返回 null 。
答案 2 :(得分:0)
我可以将一个模拟列表返回给object,但我想知道是否可以阻止Collections.sort()执行。
我没有办法防止这种情况发生
只要执行调用它的方法并且只要您不能更改测试代码,就会执行Collections.sort()
。原因是sort
是一种静态方法。您可以传递或注入一个模拟实例来实现您的目标。
返回一个可以排序的模拟列表是我认为的方法。如果在测试期间操纵测试类的行为,则发现错误的风险更高。此外,在这种情况下,测试类和测试类之间存在紧密耦合。