Рассмотрим ситуацию, когда мы тестируем метод, который зависит от соавтора , Этот соавтор принимает аргумент при вызове одного из своих методов. Теперь может быть два scenarios- 1. Аргумент передаются извне методу тестируется и затем используется соавтором во время своего собственного вызова метода
method(argument arg)
{
collaborator.callMethod(arg);
}
Для проверки этого метода мы издеваться Коллаборатор а затем вызвать метод следующего
method(arg1);
Mockito.verify(collaborator).callMethod(arg1);
так вот в методе испытаний мы имеем arg1 экземпляра и, следовательно, может быть проверен
2.Аргумент используется соавтора, чтобы сделать свой собственный метод вызова не передается извне, и, но создается внутри метода тестируется
method()
{
arg=CreateArgumentInternally();
collaborator.callMethod(arg);
}
Для проверки этого метода мы издеваться Сотрудница, а затем вызвать метод следующим
method();
Но как мы убеждаемся, что соавтор был вызван с помощью каких аргументов, поскольку у нас нет доступа к аргументу, поскольку он был создан внутри метода. Это, где Mockito ArgumentCaptor входит в картину.
Используя ArgumentCaptor, мы можем получить экземпляр аргумента, созданный внутренне и используемый в вызове соавтора, и, таким образом, мы можем его проверить.
Mockito.verify(collaborator).callMethod(captor.capture());
Argument actual = captor.getValue();
Справочно Understanding Mockito ArgumentCaptor using Spring Boot Test Example
Что делать, если существует несколько параметров, передаваемых в метод - все из разных типов? Как вы на самом деле проверяете, что логический параметр был ** true **, например. –
Можете ли вы дать объяснение для своего комментария: _Oh, и, пожалуйста, рассмотрите возможность использования TestNG вместо JUnit._. Зачем это считать? Зачем меняться? – Navigatron