为什么TestNG会执行一个没有@Test注解的公共方法

5

我有一个类,其中包含5个使用@Test注解的测试方法(我正在使用Java和TestNG),以及一个公共助手方法(在同一类中),该方法具有一些逻辑,并且每个测试方法都会调用此方法。问题是,所有5个测试都通过了,但是testng尝试执行辅助方法并显示其为跳过/失败。以下是我正在使用的代码:

public class TestClass extends BaseTestClass {

@Test
public void testA(){
    //first test code 
}

@Test
public void testB(){
    //second test code
}

@Test
public void testC(){
    //third test code
}

@Test
public void testD(){
    //fourth test code
}

@Test
public void testE(){
    //fifth test code
}


public void helperMethod( ){
    //some logic that each test method is using
}  

这是我得到的结果:

PASSED: testA
PASSED: testB
PASSED: testC
PASSED: testD
PASSED: testE
SKIPPED: helperMethod
org.testng.TestNGException: 
Method helperMethod requires 2 parameters but 0 were supplied in the @Test annotation.
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:198)
    at org.testng.internal.Parameters.createParameters(Parameters.java:134)
    at org.testng.internal.Parameters.createParameters(Parameters.java:373)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:450)
    at org.testng.internal.Invoker.handleParameters(Invoker.java:1383)
    at org.testng.internal.Invoker.createParameters(Invoker.java:1075)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1180)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)


===============================================
    Default test
    Tests run: 6, Failures: 0, Skips: 1
===============================================

然而,如果我将helperMethod声明为private,则可以正常工作。能否有人解释一下,为什么会发生这种情况?

1个回答

11

您的TestClass类及其所有父类中是否有@Test注释?如果有这样的注释,则认为其所有公共方法都是测试方法。


是的。BaseTestClass有@Test注释。@Test(groups = { "base" }) public class BaseTest { - AGill
在这里应该选择什么方式?将helperMethod声明为私有的好吗? - AGill
1
我认为任何可以私有化的东西都应该是私有的,所以是的。 :-) - C. K. Young
感谢 @Chris Jester-Young - AGill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接