Когда вызывается logger.error
, есть много разных вещей, которые могут быть переданы в качестве 3-го аргумента.
Как проверить, что e
содержит определенную подстроку?
Этомой рабочий код ..
public class MyClass {
private ILogger logger = Slf4jLogbackLogger
.generateLogger(MyClass.class.getClassLoader().getResource("log_messages.properties"));
public void doSomething() {
logger.info(Optional.empty(), "MyClass.doSomething");
try {
.. do things // throw new RuntimeException("something");
} catch (Exception e) {
logger.error(Optional.empty(), "HANDLE_EXCEPTION", e);
}
}
}
Мой тестовый код ..
@RunWith(MockitoJUnitRunner.class)
public class TestMyClass {
@Mock
private ILogger logger;
@InjectMocks
@Spy
private MyClass myClass = new MyClass();
@Before
public void init() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMyClass() throws Exception {
try {
myClass.doSomething();
} catch (Exception e) {
fail("Should not have thrown any exceptions");
}
Mockito.verify(logger, Mockito.times(1)).error(Optional.empty(), "HANDLE_EXCEPTION", "Contains something specific");
}
}
Это ошибка, которую я получаю ..
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
3 matchers expected, 1 recorded:
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"));
Попробовалтакие вещи, как ниже, но та же ошибка:
ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
Mockito.verify(logger, Mockito.times(1)).error(Optional.empty(), "HANDLE_EXCEPTION", argument.capture());