2017-09-05 59 views
1

我需要测试一个将列表作为参数的方法。以下是示例代码:单元测试将列表作为参数的方法

public class C 
{ 
    private int x; 
    private String y; 
    //getters and setters 
} 
public class B 
{ 
    public void collectC(List<C> cList) 
    { 
     for(C c : cList) 
     { 
      System.out.println("int: " + c.getX() + "String: "+ c.getY()); 
     } 
    } 
} 

因此,类B只是简单地收集类C的对象并使用增强for循环对它进行迭代。 现在,我想测试一个B类的方法。下面是测试代码。

public class BTest 
{ 
    private List<C> cList; 
    @Mock private C c; 
    @InjectMocks private B b; 

    @Before 
    public void setUp() 
    { 
     cList = new ArrayList<>(); 
     cList.add(c); 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void testCollectC() 
    { 
     Mockito.when(c.getX()).thenReturn(5); 
     Mockito.when(c.getY()).thenReturn("Hello There"); 
     b.collectC(cList); 
    } 
} 

所以,这是给我的错误NullPointerExceptionSystem.out.println()一条线在那里我调用上的“C”对象的方法。 然后我改变了我嘲笑列表和迭代器的代码,所以现在我的代码工作正常。但是我想知道上面提到的代码有什么问题以及它失败的原因?

+0

您还没有初始化Ç –

+0

哦,我傻:)谢谢,我找到了解决方案,由你和下面的答复中提到。 – tv1902

回答

2

你必须实例c之前,你把它添加到cList否则cList包含一个null元素。

下测试通过:

public class BTest { 
    private List<C> cList; 
    @Mock 
    private C c; 

    @InjectMocks 
    private B b; 

    @Before 
    public void setUp() { 
     MockitoAnnotations.initMocks(this); 
     cList = new ArrayList<>(); 
     cList.add(c); 
    } 

    @Test 
    public void testCollectC() { 
     Mockito.when(c.getX()).thenReturn(5); 
     Mockito.when(c.getY()).thenReturn("Hello There"); 
     b.collectC(cList); 
    } 
} 
相关问题