Fixes #358 Mockito verify method is not taken into account in JUnitTestsShouldIncludeAssert rule - treat Mockito's verify and Mockito.verify as assert statements

This commit is contained in:
Fedor Sherstobitov
2017-05-17 11:27:04 +05:00
parent abaeea12a5
commit b82228d8df
2 changed files with 74 additions and 1 deletions

View File

@ -52,7 +52,8 @@ public class JUnitTestsShouldIncludeAssertRule extends AbstractJUnitRule {
private boolean containsExpectOrAssert(Node n, Map<String, List<NameOccurrence>> expectables) {
if (n instanceof ASTStatementExpression) {
if (isExpectStatement((ASTStatementExpression) n, expectables)
|| isAssertOrFailStatement((ASTStatementExpression) n)) {
|| isAssertOrFailStatement((ASTStatementExpression) n)
|| isVerifyStatement((ASTStatementExpression) n)) {
return true;
}
} else {
@ -137,6 +138,25 @@ public class JUnitTestsShouldIncludeAssertRule extends AbstractJUnitRule {
return false;
}
/**
* Tells if the expression is verify statement or not
*/
private boolean isVerifyStatement(ASTStatementExpression expression) {
if (expression != null) {
ASTPrimaryExpression pe = expression.getFirstChildOfType(ASTPrimaryExpression.class);
if (pe != null) {
Node name = pe.getFirstDescendantOfType(ASTName.class);
if (name != null) {
String img = name.getImage();
if (img != null && (img.startsWith("verify") || img.startsWith("Mockito.verify"))) {
return true;
}
}
}
}
return false;
}
private boolean isExpectStatement(ASTStatementExpression expression,
Map<String, List<NameOccurrence>> expectables) {

View File

@ -340,4 +340,57 @@ public class Foo {
}
]]></code>
</test-code>
<test-code>
<description>#358 Treat Mockito's verify as assert expressions</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock
private Bar bar;
@Test
public void testFooCallsBar() {
Foo foo = new Foo(bar);
foo.doTask();
verify(bar, times(1)).actuallyDoTask();
}
}]]></code>
</test-code>
<test-code>
<description>#358 Treat Mockito's Mockito.verify as assert expressions</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock
private Bar bar;
@Test
public void testFooCallsBar() {
Foo foo = new Foo(bar);
foo.doTask();
Mockito.verify(bar, Mockito.times(1)).actuallyDoTask();
}
}]]></code>
</test-code>
</test-data>