я работать с ПМК узором и Трейд проверить укороченный метод PRESENTERMockito тест неудачу
Это
final public void setOriginPreviewImage() {
final String path = model.getImageFilePath();
iActivityAcceptNotAccept.setPreviewImage(path);
}
Этот метод возвращает путь и передать его через интерфейс для просмотра
Это test
public class PresenterActivityAcceptNotAcceptTest {
private PresenterActivityAcceptNotAccept presenter;
@Mock ModelAcceptNotAccept model;
@Mock IActivityAcceptNotAccept iActivityAcceptNotAccept;
@Before public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
presenter = new PresenterActivityAcceptNotAccept(iActivityAcceptNotAccept);
}
@Test public void setOriginPreviewImage() throws Exception {
presenter.setOriginPreviewImage();
when(model.getImageFilePath()).thenReturn("path");
String path = model.getImageFilePath();
verify(iActivityAcceptNotAccept).setPreviewImage(path);
}
здесь, в первой строке, я вызываю метод, затем выполните when()
, чтобы указать, что если getImageFilePath()
будет вызываться, тогда возвращаем "path"
в качестве значения.
В третьей строке я вызываю getImageFilePath()
Я ожидаю получить valeu, который я установил до этой строки - "path"
.
Но вместо этого я получаю такую ошибку
java.lang.NullPointerException в com.fittingroom.newtimezone.tools.cameraTools.ImageSaver.getImageFilePath (ImageSaver.java:37) в com.fittingroom .newtimezone.model.ModelAcceptNotAccept.getImageFilePath (ModelAcceptNotAccept.java:14)
Я получаю ошибку при обработке model.getImageFilePath();
в соответствии с тестом файла журнала не вернуть обратно значение, которое я воздвиг прокат
when(model.getImageFilePath()).thenReturn("path");
вместо этого он пытается получить значение из метода, конечно, нет никакого значения, потому что это испытание ...
Как модель, ассоциированные с инфекцией ведущий
public final class PresenterActivityAcceptNotAccept implements IPresenterAcceptNotAccept {
private IActivityAcceptNotAccept iActivityAcceptNotAccept;
private ModelAcceptNotAccept model;
public PresenterActivityAcceptNotAccept(IActivityAcceptNotAccept iActivityAcceptNotAccept) {
this.iActivityAcceptNotAccept = iActivityAcceptNotAccept;
this.model = new ModelAcceptNotAccept(this);
}
код модели
public class ModelAcceptNotAccept {
private IPresenterAcceptNotAccept iPresenterAcceptNotAccept;
public ModelAcceptNotAccept(IPresenterAcceptNotAccept iPresenterAcceptNotAccept) {
this.iPresenterAcceptNotAccept = iPresenterAcceptNotAccept;
}
public String getImageFilePath(){
return ImageSaver.getImageFilePath();
}
}
Что я делаю неправильно?
EDIT
@Test public void setOriginPreviewImage() throws Exception {
//when(model.getImageFilePath()).thenReturn("path");
doReturn("path").when(model.getImageFilePath());
presenter.setOriginPreviewImage();
String path = model.getImageFilePath();
verify(iActivityAcceptNotAccept).setPreviewImage(path);
}
дают мне такие ошибки
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at com.fittingroom.newtimezone.presenters.PresenterActivityAcceptNotAcceptTes t.setOriginPreviewImage(PresenterActivityAcceptNotAcceptTest.java:30)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, you naughty developer!
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed
at com.fittingroom.newtimezone.presenters.PresenterActivityAcceptNotAcceptTest.setOriginPreviewImage(PresenterActivityAcceptNotAcceptTest.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
EDIT2
EDIT3
Моего тест Теперь
@Test public void setOriginPreviewImage() throws Exception {
presenter.setOriginPreviewImage();
doReturn("path").when(model).getImageFilePath();
String path = model.getImageFilePath();
verify(contractAcceptNotAccept).setPreviewImage(path);
}
Ошибка
да действительно это выглядит как правильно, но в любом случае я получаю ошибку.Не то же самое, что было, но у меня нет предположений, почему ... Похоже, что метод 'doReturn()' работает неправильно. Я добавил новый скриншот на вопрос 'EDIT3' –
Я нашел ошибку)) эта строка' doReturn («путь»). Когда (model) .getImageFilePath(); 'должна быть первой строкой в методе тестирования) Спасибо –