【问题标题】:Why TestNG is executing a public method without @Test annotation为什么 TestNG 正在执行一个没有 @Test 注释的公共方法
【发布时间】:2014-08-14 05:11:56
【问题描述】:

我在单个类中有 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
}  

}

这是 m 得到的结果:

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 声明为私有,它就可以正常工作。谁能解释一下,为什么会这样?

【问题讨论】:

    标签: java selenium-webdriver testng


    【解决方案1】:

    您的TestClass 或其任何超类是否有@Test 注释?如果一个类有这样的注解,那么所有的公共方法都被认为是测试方法。

    【讨论】:

    • 是的。 BaseTestClass 有 @Test 注释。 @Test(groups = { "base" }) 公共类 BaseTest {
    • 这里应该首选什么方式?将 helperMethod 声明为私有是一种好方法吗?
    • 我会说任何可以私有的东西都应该是,所以是的。 :-)
    • 感谢@Chris Jester-Young
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2018-03-08
    • 2016-02-13
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多