public interface MockitoHint
Strictness
).
In Mockito 3 we won't be needing hints because Strictness.STRICT_STUBS
will be the default for all mocks.
Why hints? To improve productivity when writing Java tests stubbing hints and warnings are printed to standard output.
Hints contain clickable links that take you right to the line of code that contains a possible problem. Those are hints - they not necessarily indicate real problems 100% of the time. This way the developer can:
How to take advantage of the hints? Use:
UnnecessaryStubbingException
.
Example:
Let's say the test fails on assertion. Let's say the underlying reason is a stubbed method that was called with different arguments:
//test:
Dictionary dictionary = new Dictionary(translator);
when(translator.translate("Mockito")).thenReturn("cool framework");
String translated = dictionary.search("Mockito");
assertEquals("cool framework", translated);
//code:
public String search(String word) {
...
return translator.translate("oups");
On standard output you'll see a hint with clickable links to both locations:
a) stubbing declaration and b) the method call on a stub with mismatched argument.
Note that it is just a warning, not an assertion. The test fails on assertion because it is the assertion's duty to document what the test stands for and what behavior it proves. Hints just makes it quicker to figure out if the test fails for the right reason.
Feedback is very welcome at issue 384.