CodeQL 文档

错误的测试套件方法

ID: java/wrong-junit-suite-signature
Kind: problem
Security severity: 
Severity: warning
Precision: medium
Tags:
   - testability
   - maintainability
   - frameworks/junit
Query suites:
   - java-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

JUnit 3.8 要求用于定义 TestRunner 将使用的 TestSuitesuite 方法具有特定的签名。如果 suite 方法没有预期的签名,JUnit 就不会将其检测为 suite 方法。

建议

确保 junit TestCase 类中的 suite 方法声明为 publicstatic,并且它们的返回类型为 junit.framework.Test 或其子类型之一。

示例

在以下示例中,BadSuiteMethod.suite 不会被 JUnit 检测到,因为它没有声明为 public。但是,CorrectSuiteMethod.suite *可以* 被 JUnit 检测到,因为它具有预期的签名。

public class BadSuiteMethod extends TestCase {
	// BAD: JUnit 3.8 does not detect the following method as a 'suite' method.
	// The method should be public, static, and return 'junit.framework.Test' 
	// or one of its subtypes.
	static Test suite() {
		TestSuite suite = new TestSuite();
		suite.addTest(new MyTests("testEquals"));
		suite.addTest(new MyTests("testNotEquals"));
		return suite;
	}
}

public class CorrectSuiteMethod extends TestCase {
	// GOOD: JUnit 3.8 correctly detects the following method as a 'suite' method.
	public static Test suite() {
		TestSuite suite = new TestSuite();
		suite.addTest(new MyTests("testEquals"));
		suite.addTest(new MyTests("testNotEquals"));
		return suite;
	}
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私