Модульные тесты, Mock объекты в режимах отладки и запуска - PullRequest
0 голосов
/ 01 апреля 2020

Я разрабатываю юнит-тест. Если я запускаю тестирование в режиме выполнения, запуск завершается с сообщением:

This exception may occur if matchers are combined with raw values: 
   //incorrect:
   someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
   //correct:
   someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.

Если я запускаю тест в режиме отладки с точкой останова на String tableName = table. getTableName () тест проходит успешно. Останов происходит в точке останова.

@Test
void myTest() {
    Table table = mock(Table.class);
    when(table.getTableName()).thenReturn("mytableName")
    SQLService service = new SQLService(table);
    service.select();
}

class SQLService {
    private final Table table;
    SQLService(Table table) {
         this.table = table;
    }

    void select() {
        String tableName = table.getTableName(); // <---- issue here, breakpoint is set on this line
        ........    
    }
}

1 Ответ

1 голос
/ 01 апреля 2020

Эта проблема вызвана смешиванием сопоставлений с необработанными значениями. Если вы используете matchers, то вам нужно использовать matchers для всех аргументов.

Попробуйте использовать механизм сопоставления .eq (), с вашим кодом это будет примерно так:

when(Mockito.eq(table.getTableName())).thenReturn("mytableName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...