1
2
3
4
5 package com.qulice.pmd.rules;
6
7 import net.sourceforge.pmd.lang.java.ast.ASTBlock;
8 import net.sourceforge.pmd.lang.java.ast.ASTMethodCall;
9 import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
10 import net.sourceforge.pmd.lang.java.rule.AbstractJavaRulechainRule;
11 import net.sourceforge.pmd.lang.java.rule.internal.TestFrameworksUtil;
12
13
14
15
16
17
18
19
20
21
22
23 public final class UnitTestContainsTooManyAssertsRule
24 extends AbstractJavaRulechainRule {
25
26 public UnitTestContainsTooManyAssertsRule() {
27 super(ASTMethodDeclaration.class);
28 }
29
30 @Override
31 public Object visit(final ASTMethodDeclaration method, final Object data) {
32 final ASTBlock body = method.getBody();
33 if (body != null
34 && TestFrameworksUtil.isTestMethod(method)
35 && body.descendants(ASTMethodCall.class)
36 .filter(UnitTestContainsTooManyAssertsRule::isCountedAssert)
37 .count() > 1) {
38 this.asCtx(data).addViolation(method);
39 }
40 return data;
41 }
42
43 private static boolean isCountedAssert(final ASTMethodCall call) {
44 return TestFrameworksUtil.isProbableAssertCall(call)
45 && !"assertThrows".equals(call.getMethodName());
46 }
47 }