2017-09-25 22 views
0

我想测试一个使用ContextWrapper类的模块。ContextWrapper中的方法getDir没有被模拟[Mockito]

我尝试使用此代码来嘲笑它:

ContextWrapper contextWrapper = mock(ContextWrapper.class); 
File myFile = mock(File.class); 
doReturn(mFile).when(contextWrapper).getDir(anyString(), anyInt()); 

被测试的方法仍然使用它自己的ContextWrapper 的声明,并返回一个异常

java.lang.RuntimeException: Method getDir in android.content.ContextWrapper not mocked 

我检查其他项目相关到这个问题,我发现它可能是由于作为一个独家的Android类。

我也尝试过的Mockito V2的

given(contextWrapper.getDir(AppFolders.getFolderPath(), Context.MODE_PRIVATE)).willReturn(mFile); 

编辑: 这里是我想测试

public void send(final String id, final ErrorReport errorReport, final MyCallback callback) { 
if(null == errorReport || null == errorReport.getType()){ 
    callback.result("Error Report Empty")); 
    return; 
} 

try { 
    processResponse(sendReport(id, errorReport), 
      callback, 
      new Executable() { 
      @Override 
      public void execute() throws Exception { 
       callback.result("SUCCESS"); 
      } 
      }, 
      origin); 
} catch (Exception e) { 
    e.printStackTrace(); 
}} 

和 模块这里就是ContextWrapper位于模块

private MyResponse sendReport(String id, ErrorReport errorReport) throws Exception { 
ContextWrapper contextWrapper = new ContextWrapper(context); 
AppFolders.setCustomerInfoZipFilename(id); 
File logFolder = contextWrapper.getDir(AppFolders.getFolderPath(), Context.MODE_PRIVATE); 
File zipFile = new File(logFolder.getAbsolutePath() + AppFolders.getCustomerInfoZipFilename()); 

String zipBase64 = getBase64String(zipFile); 

ErrorReportData errorReportData = new ErrorReportData(); 
errorReportData.setData(zipBase64); 

MyResponse response = myClient.errorReport(errorReportData); 
return response;} 

这里是测试模块

public class Send extends BaseTest{ 

private static final String URL_METHOD_CALL = "send/"; 

private File myFile; 

private ContextWrapper contextWrapper; 

@Test 
public void when_send_response_valid_then_callback_success() throws Exception { 

    ErrorReport errorReport = new ErrorReport(); 
    errorReport.setType(new ErrorType()); 

    contextWrapper = mock(ContextWrapper.class); 

    myFile = mock(File.class); 

    whenNew(ContextWrapper.class).withArguments(any(Context.class)).thenReturn(contextWrapper); 
    doReturn(myFile).when(contextWrapper).getDir(anyString(), anyInt()); 


    MyResponse response = MockClient.getMockClient().submit(mockHost+URL_METHOD_CALL, StatusCode.STATUS_SUCCESS); 

    doSetToken(); 
    when(client.errorReport(any(ErrorReportData.class), any(ClientImpl.Header.class))).thenReturn(response); 
    service.send(mockUser, errorReport, new Callback<String>() { 
     @Override 
     public void result(Response<String> response) { 
      assertEquals(StatusCode.STATUS_SUCCESS, response.getStatus()); 
     } 
    }); 
}} 
+0

添加实际的方法IMPL,也完整的测试方法IMPL –

+0

谢谢,我已经编辑原帖 – Strauss

+0

使用powermockitoü这里有吗?你有公共类的注释Send extends BaseTest {? –

回答

0

试试这个

File myFile = mock(File.class); 
when(contextWrapper.getDir(anyString(), anyInt())).thenReturn(myFile); 
+0

尝试后,它仍然显示相同的例外。 – Strauss

相关问题