Проблема в том, что ваш объект заглушки State
не знает, что значение, возвращаемое getValue()
, должно быть последним значением, которое было передано setValue()
.
Заглушка, созданная Mockito, нене принимайте автоматически, что у вас есть получатель и установщик, и получатель должен вернуть то, с чем вызывался последний раз.Это просто тупая заглушка, которая делает только то, что вы сказали, и вы не сказали ей ничего делать, когда вызывается setValue()
.
Возможно, проще всего проверить, что setValue
был вызван с округленным значением, а не попыткой извлечь его из getValue()
:
Mockito.verify(context.getState()).setValue(AdditionalMatchers.eq(4.123, 0.0));
Другой подход заключается в создании тестового класса State
, который имеет реальные методы получения и установки, и использовать его в своемтесты.Конечно, можете ли вы сделать это, зависит от того, сколько других методов у этого класса.Если бы вы написали такой класс (я назвал его TestState
в приведенном ниже коде), тестовый код выглядел бы следующим образом:
@Test
public void testProcess2(){
Context context = Mockito.mock(Context.class);
Mockito.when(context.getState()).thenReturn(new TestState());
context.getState().setValue(4.12345);
sample.process(context);
assertEquals(4.123,context.getState().getValue(),0.0);
}