java.io.File
не представляет файл open , он представляет собой путь в файловой системе. Поэтому использование метода close
на нем не имеет смысла.
На самом деле этот класс был неправильно назван авторами библиотеки, его следует называть как Path
.
Вы можете создать ответ в Mockito. Предположим, у нас есть интерфейс с именем Application с методом myFunction.
public interface Application {
public String myFunction(String abc);
}
Вот метод тестирования с ответом Mockito:
public void testMyFunction() throws Exception {
Application mock = mock(Application.class);
when(mock.myFunction(anyString())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
return (String) args[0];
}
});
assertEquals("someString",mock.myFunction("someString"));
assertEquals("anotherString",mock.myFunction("anotherString"));
}
Начиная с Mockito 1.9.5 и Java 8 существует еще более простой способ использования лямбда-функций:
when (myMock.myFunction (anyString ())). thenAnswer (i -> i.getArguments () [0]);
Можно достигнуть этого при помощи , ArgumentCaptor
Предполагает, что у Вас есть бобовая функция как так.
public interface Application {
public String myFunction(String abc);
}
Тогда в Вашем тестовом классе:
//Use ArgumentCaptor to capture the value
ArgumentCaptor<String> param = ArgumentCaptor.forClass(String.class);
when(mock.myFunction(param.capture())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
return param.getValue();//return the captured value.
}
});
ИЛИ , если Вы вентилируете лямбды просто, сделайте:
//Use ArgumentCaptor to capture the value
ArgumentCaptor<String> param = ArgumentCaptor.forClass(String.class);
when(mock.myFunction(param.capture()))
.thenAnswer((invocation) -> param.getValue());
Сводка: Использование argumentcaptor, для получения параметра передало. Позже в возврате ответа значение получило использование getValue.
Это немного старо, но я приехал сюда, потому что у меня была та же проблема. Я использую JUnit, но на этот раз в приложении Kotlin с mockk. Я отправляю образец здесь для ссылки и сравнения с дубликатом Java:
@Test
fun demo() {
// mock a sample function
val aMock: (String) -> (String) = mockk()
// make it return the same as the argument on every invocation
every {
aMock.invoke(any())
} answers {
firstArg()
}
// test it
assertEquals("senko", aMock.invoke("senko"))
assertEquals("senko1", aMock.invoke("senko1"))
assertNotEquals("not a senko", aMock.invoke("senko"))
}