Mockito: как проверить метод, который изменяет значение частного поля? - PullRequest
0 голосов
/ 28 мая 2019

У меня есть метод void create(File file);, который создает структуру данных (карту) в классе, который будет создавать и помещать данные в приватное поле:

private Map<String> myMap

класса.

Теперь я хочу протестировать метод create, как я могу это сделать?Спасибо!

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Вы можете получить доступ к своему свойству с отражением (см., Например, здесь ), но тот факт, что вам нужно взломать свой класс, чтобы проверить результат выполнения функции, звучит как запах проекта.Модульное тестирование должно проверять поведение от начала до конца вашего модуля.Мутирование внутреннего состояния вашего объекта является побочным эффектом, который следует проверять в ожидании того, что какой-либо метод мутации был вызван из тестируемого вами модуля ..... На практике вы можете попробовать смоделировать Map.put () ипроверить, что было вызвано, вместо проверки самой карты

0 голосов
/ 30 мая 2019

Вы можете использовать аннотацию @InjectMocks & @Mock.

Вот пример для JUnit 5 с последней версией Mockito (v2.27).

class SomeClass {

    private Map<String, String> myMap = new HashMap<>();

    public boolean doSomething(String fileName) {
        return myMap.containsKey(fileName);
    }
}

@ExtendWith(MockitoExtension.class)
class SomeClassTest {

    @InjectMocks
    SomeClass someClass;

    @Mock
    Map<String, String> map;

    @Test
    public void test() {

        Mockito.when(map.containsKey("test")).thenReturn(true);

        Assert.assertTrue(someClass.doSomething("test"));

        Mockito.verify(map, Mockito.times(1)).containsKey("test");
    }
}
0 голосов
/ 28 мая 2019
class MyClass {
    private final Map<K, V> map;

    MyClass() {
        // production ctr
        this(new HashMap<>();
    }

    MyClass(Map<K, V> map) {
        // visible for testing
        this.map = map;
    }

    void create...

Таким образом, ваш тест может внедрить карту и утверждать, что create вызывает ожидаемые побочные эффекты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...