2016-12-21 3 views
1

Я пытаюсь издеваться файл загрузка (с помощью VertX) с Mockito но бросает NullPointerError на getParam("type") используется в when(event.request().getParam("type")).thenReturn("application/octet-stream");Стыковка запроса на отправку с помощью Mockito вызывает NullPointerException на «когда (event.request(). GetParam (« type »)). ThenReturn (« application/octet-stream »);

модульного тестирования Моего выглядят следующим образом:

private UploadResultatenHandler uploadResultatenHandler; 

@Mock 
RoutingContext event; 
File folder; 
Set<io.vertx.ext.web.FileUpload> upload; 
HttpServerRequest httpServerRequest; 
HttpServerResponse httpServerResponse; 

@Before 
public void setUp() { 
    uploadResultatenHandler = new UploadResultatenHandler(); 
    MockitoAnnotations.initMocks(this); 

    when(event.request().getParam("type")).thenReturn("application/octet-stream"); 
    when(event.fileUploads()).thenReturn(upload); 

    when(httpServerResponse.setStatusCode(200)).thenReturn(httpServerResponse); 
    when(event.response()).thenReturn(httpServerResponse); 
} 

@Test 
public void testCleanHandler() { 
    uploadResultatenHandler.handle(event); 
    verify(event).response(); 
} 

«uploadResultatenHandler.handle (мероприятие);" :

@Override 
public void handle(RoutingContext event) { 
    String newFileName = event.request().getParam("type"); 
    Set<FileUpload> uploads = event.fileUploads(); 
    System.out.println(uploads); 
    for (FileUpload fileUpload : uploads) { 
     String oldFileName = fileUpload.uploadedFileName(); 

     char[] inhoud = FileReader.readFileUTF8ToString(oldFileName).toCharArray(); 
     String fileExtention = setFileExtension(fileUpload.contentType()); 

     FileCreater.createFile(newFileName, fileExtention, "file-uploads/", inhoud); 
     FileDeleter.deleteFile(oldFileName); 
    } 
    event.response().setStatusCode(200).end("Check"); 
} 

private String setFileExtension(String type) { 
    switch (type) { 
    case "text/xml": 
     return ".xml"; 
    case "application/octet-stream": 
     return ".json"; 
    default: 
     return ".txt"; 
    } 
} 

Я думаю, что это, возможно, придется что-то делать с издевался RoutingContext не имея этот параметр, но я не знаю, как исправить/обойти эту ошибку?

Я изменил строку на то, когда (event.request()). ThenReturn (request); когда (request.getParam ("тип")) thenReturn ("применение/окт-поток и др."); и mocks: Mock (answer = Answers.RETURNS_DEEP_STUBS) Событие RoutingContext; Папка @Mock File; Установить загрузку; Запрос HttpServerRequest; Ответ HttpServerResponse; но я все еще получаю NullPointer

Stack след:

java.lang.NullPointerException в nl.icaprojecten.TestIntegratieQuintor.ServiceLayer.rest.UploadResultatenHandlerTest.setUp (UploadResultatenHandlerTest.java:42) на солнце. reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) в sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) в java.lang.reflect.Method.invoke (Unknown Source) at org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) на org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) на org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47) на org.junit.internal. runners.statements.RunBefores.evaluate (RunBefores.java:24) на org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) на org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:78) на org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) на org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) на org.junit.runners.ParentRunner $ 2.оценить (ParentRunner.java:268) на org.junit.runners.ParentRunner.run (ParentRunner .java: 363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java : 38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:678)) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java : 192)

+0

Вы не пропуская ни 'когда (event.request()) thenReturn (httpServerRequest);' в вашем методе настройки? – JonK

+0

@JonK У меня есть следующая строка: when (event.request(). GetParam («type»)). ThenReturn («application/octet-stream»); –

+0

Я вижу это. Но я не вижу, где вы создали то, что должно возвращать событие event.request(). Если вы не установили *, что * вверх, он вернет «null». – JonK

ответ

2

Поскольку вы не указали какой-либо тип поведения для event.request(), оно вернет null. Вызов getParam на нем, конечно же, потерпит неудачу с NullPointerException.Есть несколько способов обойти это, но самый элегантный, ИМХО, было бы использовать deep stubbing:

@Mock(answer = Answers.RETURNS_DEEP_STUBS) 
RoutingContext event; 
0

насмешливая не работает рекурсивно. .

вы должны разделить эту строку

when(event.request().getParam("type")).thenReturn("application/octet-stream"); 

к этому

Request request = mock(Request.class); 
when(event.request()).thenReturn(request); 
when(request.getParam("type")).thenReturn("application/octet-stream"); 
+0

Я изменил строку на 'when (event.request()). ThenReturn (request); \t \t, когда (request.getParam ("тип")) thenReturn ("Применение/октет-поток"); 'и издевается к:.' Mock (ответ = Answers.RETURNS_DEEP_STUBS) \t RoutingContext событие; \t \t @Mock \t Папка с файлом; \t Установить загрузить; \t Запрос HttpServerRequest; \t HttpServerResponse response; 'но я все равно получаю NullPointer –

+0

, пожалуйста, добавьте (полный) стекtrace к вашему вопросу. –