Я работаю над книгой «Растущее объектно-ориентированное программное обеспечение, управляемое тестированием».AssertJ и Mockito: проверьте немного сложное событие JTable?
Но я использую AssertJ и Mockito вместо Hamcrest и jMock.
Мне раньше нужно было проверить наличие одного или нескольких событий таблицы, связанных с строкой 0 JTable
.
// verify that one or more events in row 0 happen
verify(listener, atLeastOnce()).tableChanged(refEq(new TableModelEvent(model, 0)));
(NB я любезно сообщил о refEq
по Mureinik here несколько дней назад).
Теперь мне нужно проверить, что ровно один TableModelEvent
произошел в строке 0, типа TableModelEvent.UPDATE
. В книге:
one(listener).tableChanged(with(aChangeInRow(0)));
... aChangeInRow
появляется прийти от JMock.
NB TableModelEvent
имеет полезный метод getType()
. Вот что я хочу написать:
// verify that precisely one ***change*** event happens in row 0
// *** CAVEAT: ERRONEOUS CODE ***
verify(listener).tableChanged(refEq(new TableModelEvent(model, 0))).getType().isEqualTo(TableModelEvent.UPDATE);
но это даже не компилируется ... что я должен был написать?
В целом, существует ли метод AssertJ/Mockito для извлечения значения, переданного в качестве параметра (здесь a TableModelEvent
), к проверенному методу, чтобы подвергнуть его любым тестам, которые вы хотите?
Спасибо ... но (если я не понял), 'Matcher' и' BaseMatcher' действительно являются классами Hamcrest. Может быть, нет никакого решения без Хэмкреста (я слишком много тестировал newb на этом этапе, следовательно, вопрос), но я был бы очень удивлен, если бы так ... –
Правильно, но вы можете использовать класс ArgumentMatcher из Mockito. См. Мое обновление выше. –
ОК спасибо ... мне, однако, мне просто интересно, не может ли быть техника AssertJ, которая больше в «плавном» духе AssertJ? Который в моем сознании (как я говорю, я новичок) не связан с моей другой проблемой, а это то, что ваше решение не проверяет номер строки, где произошло это обновление ... Я просто думаю, что может быть решение, которое каким-то образом делает оба, возможно, путем «наложения» двух методов AssertJ. –