From b82228d8dff4b403dbb0cc40bc2e1cba8ce3927d Mon Sep 17 00:00:00 2001 From: Fedor Sherstobitov Date: Wed, 17 May 2017 11:27:04 +0500 Subject: [PATCH] Fixes #358 Mockito verify method is not taken into account in JUnitTestsShouldIncludeAssert rule - treat Mockito's verify and Mockito.verify as assert statements --- .../JUnitTestsShouldIncludeAssertRule.java | 22 +++++++- .../xml/JUnitTestsShouldIncludeAssert.xml | 53 +++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java index f5443ecb45..eb20a28299 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java @@ -52,7 +52,8 @@ public class JUnitTestsShouldIncludeAssertRule extends AbstractJUnitRule { private boolean containsExpectOrAssert(Node n, Map> 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> expectables) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/junit/xml/JUnitTestsShouldIncludeAssert.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/junit/xml/JUnitTestsShouldIncludeAssert.xml index 92416e75ba..8f4f956c1a 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/junit/xml/JUnitTestsShouldIncludeAssert.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/junit/xml/JUnitTestsShouldIncludeAssert.xml @@ -340,4 +340,57 @@ public class Foo { } ]]> + + #358 Treat Mockito's verify as assert expressions + 0 + + + + #358 Treat Mockito's Mockito.verify as assert expressions + 0 + +