2017-03-02 188 views
1

我正在尝试编写Mockito测试用例来获取plantIDs并执行一些处理。 我也加了测试用例。使用Mockito嘲笑

这是我的测试案例

@RunWith(MockitoJUnitRunner.class) 
public class PlantDetailsServiceTest { 
    @InjectMocks PlantDetailsService service; 
    @Mock PlantDetailsHelper helperMock; 
    @Mock HttpURLConnection conn; 
    @Mock BufferedReader buf; 
    @Mock InputStream input; 
    @Mock InputStreamReader ir; 
    @Mock JSONObject json; 
    @Mock JSONArray arr; 
    @Mock List<String> plantResult; 


    @Test 
    public void TestGetPlantDetails() throws Exception 
    { 
     String plantID1= "23"; 

     List<String> plantResult = new ArrayList<String>(); 
     plantResult.add(plantID1); 
     Mockito.when(helperMock.getPlantIds()).thenReturn(plantResult); 
     URL url = new URL("**********/23"); 
     conn=(HttpURLConnection)url.openConnection(); 
     Mockito.when((HttpURLConnection)url.openConnection()).thenReturn(conn); 
     Mockito.when(conn.getResponseCode()).thenReturn(200); 
     input=conn.getInputStream(); 
     Mockito.when(conn.getInputStream()).thenReturn(input); 
     ir=new InputStreamReader(input); 
     Mockito.when(new InputStreamReader((conn.getInputStream()))).thenReturn(ir); 
     buf=new BufferedReader(ir); 
     Mockito.when(new BufferedReader(new InputStreamReader((conn.getInputStream())))).thenReturn(buf); 
     String output=buf.readLine(); 
     Mockito.when(buf.readLine()).thenReturn(output); 
     json=new JSONObject(output); 
     Mockito.when(new JSONObject(output)).thenReturn(json); 
     arr=json.getJSONArray("Data"); 
     Mockito.when(json.getJSONArray("Data")).thenReturn(arr); 
     assertThat(output,is(notNullValue())); 
     List<PlantDetailsDTO> plantDetailsList=new ArrayList<PlantDetailsDTO>(); 
     plantDetailsList=service.getPlantDetails(); 

    } 
} 

这将引发一个错误在我读线InputStream()。我无法打开连接,因为URL可能是最后一类。我也在openConnection()行中出错。缺少方法调用。

+0

当你得到错误时,你的'helperMock'对象是否为null? –

+0

空指针异常在com.test.PlantDetailsS​​erviceTest.TestGetPlantDetails(PlantDetailsS​​erviceTest.java:57) – Rindha

回答

1

我想你已经忘记了添加的两个配置细节这将使注释嘲讽一个:

@RunWith(MockitoJUnitRunner.class) 
public class PlantDetailsServiceTest { 

@Before 
public void init(){ 
    MockitoAnnotations.initMocks(this); 
} 

没有这些,的Mockito不实例化@模拟的,因此你得到空指针异常。

+0

谢谢你它的工作,但探讨新的问题。我可以发布代码吗? – Rindha

+0

继续..让我们看看 –

+1

m8 ..该方法尚未准备好进行单元测试..甚至没有关闭。你需要做的是重构它,并创建一些专门用于执行算法某些部分的辅助类。然后你会单元测试这些类的小公共方法。如果你现在试着测试这种方法,即使这是可能的,没有人会理解这些测试,并且将来这些测试将被忽略。我知道重构是痛苦的,但这是测试像这样的遗留代码的唯一方法。 –