Я пытаюсь установить тестовый код, который использует com.basho.riak: riak-client: 2.0.0. Я высмеял все клиентские классы riak и надеялся получить бесполезный, но рабочий тест. Тем не менее, это не удается с нулевым указателем:Как насмехаться с клиентом riak java?
java.lang.NullPointerException
at com.basho.riak.client.api.commands.kv.KvResponseBase.convertValues(KvResponseBase.java:243)
at com.basho.riak.client.api.commands.kv.KvResponseBase.getValue(KvResponseBase.java:150)
at com.basho.riak.client.api.commands.kv.FetchValue$Response.getValue(FetchValue.java:171)
Мой тест выглядит следующим образом:
@Test public void test() {
RiakClient riakClient = mock(RiakClient.class);
@SuppressWarnings("unchecked")
RiakCommand<FetchValue.Response, Location> riakCommand = (RiakCommand<FetchValue.Response, Location>) mock(RiakCommand.class);
Response response = mock(Response.class);
when(riakClient.execute(riakCommand)).thenReturn(response);
Response returnedResponse = riakClient.execute(riakCommand);
when(response.getValue(Object.class)).thenReturn(new Object());
MyPojo myData = returnedResponse.getValue(MyPojo.class);
// Make assertions
}
Как вы модульного тестирования кода, который использует клиент Riak? В конце концов, я хотел бы убедиться, что используется ожидаемая комбинация типа/bucket/key и что ожидаемый RiakCommand запускается.
EDIT: Я вырыл больше в FetchValue класс и нашел эту структуру:
FetchValue
- это public final
FetchValue.Response
- это public static
,
- имеет пакет частно-конструктор Response(Init<?> builder)
FetchValue.Response.Init<T>
:
- protected static abstract class Init<T extends Init<T>> extends KvResponseBase.Init<T>
И есть FetchValue.Response.Builder
:
static class Builder extends Init<Builder>
- со встроенным(), что: return new Response(this);
Я предполагаю, что Mockito получает где-то затерялся среди внутренних классов и мой призыв заканчивается в KvResponseBase.convertValues
, где NP отбрасывается , KvResponseBase.convertValues
принимает значения List<RiakObject>
и я не вижу разумного способа его присвоения.
Принято. Ваши результаты вокруг Мокито действительно впечатляют. Вы помогли мне понять, что Mockito - не идеальный инструмент для этой задачи. Теперь, когда вы устарели от кода riakClient, есть ли у вас какие-либо предложения по тестированию кода, который его использует? Благодаря! – Mrtn
@Mrtn рада помочь. Я думаю, вы должны задать новый вопрос, подвергая очистке то, что вы пытаетесь проверить. Я думаю, что вы получите более широкую помощь, поскольку она не связана с тестированием mockito, а с (unit) в целом.И даже если я немного посмотрю на некоторые классы в Riak, я из эксперта;) – gontard