Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit到超类中的TestNG-@规则_Java_Junit_Testng - Fatal编程技术网

Java JUnit到超类中的TestNG-@规则

Java JUnit到超类中的TestNG-@规则,java,junit,testng,Java,Junit,Testng,我正在从JUnit转换到TestNG,并且在JUnit中面临一个远离@Rule注释的问题 在我的超类中有一个@Rule,当我将其更改为@BeforeMethod时,它根本不进入该方法。(使用该Println进行确认) 另外,当我简单地将@Rule或@ClassRule更改为@BeforeMethod时,Eclipse会抱怨它“在这个位置是不允许的” (注意,我删除了下面的一些方法,以使代码长度稍微缩短/更易于查看) 您需要注释一个方法,而不是类本身。请参阅示例:抱歉,不理解如果我将注释应用于“p

我正在从JUnit转换到TestNG,并且在JUnit中面临一个远离@Rule注释的问题

在我的超类中有一个@Rule,当我将其更改为@BeforeMethod时,它根本不进入该方法。(使用该Println进行确认)

另外,当我简单地将@Rule或@ClassRule更改为@BeforeMethod时,Eclipse会抱怨它“在这个位置是不允许的”

(注意,我删除了下面的一些方法,以使代码长度稍微缩短/更易于查看)


您需要注释一个方法,而不是类本身。请参阅示例:抱歉,不理解如果我将注释应用于“public Statement apply”,它不会抱怨,但我的dataReader不会设置您没有显示任何TestNG代码,因此很难诊断您做错了什么。你能至少用@BeforeMethod发布你的代码吗?这必须放在方法上。该方法必须是无参数的。
@Rule
适用于字段,
@BeforeMethod
适用于方法。
public abstract class AbstractTests
{

    protected static boolean oneTimeSetUpComplete;
    private static Logger log;
    private static WebSessionFactory sessionFactory;
    private static WcConfigManager config;

    private WebSession session;
    TestLogger testLogger = new TestLogger(getConfig(), getLog());

    private StringBuilder errors = new StringBuilder();

    protected WteDataProvider data;

    @ClassRule
    public static ExternalResource mainConfiguration = new ExternalResource() {

        protected void before() throws Throwable {
            setUpTests();
        };
    };

    public Verifier errorCollector = new Verifier(){
        @Override
        protected void verify() throws Throwable {
            failTestIfThereAreErrors();
        };
    };

    public TestLogger getTestLogger() {
        return testLogger;
    }

    @Rule
    public RuleChain executionOrder() {
        return RuleChain.outerRule(getTestLogger()).around(errorCollector); 
    }

    @Rule
    public TestRule dataReader = new TestRule() {

        public Statement apply(final Statement base,
                final Description description) {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {

                    System.out.println("PRINT IF YOU GO IN HERE");

                    DataProvider dataProvider = description.getAnnotation(DataProvider.class);
                    if (dataProvider == null) {
                        dataProvider = description.getTestClass().getAnnotation(DataProvider.class);
                    }

                    base.evaluate();
                };
            };
        };
    };

    protected AbstractArgosTests(
            Logger logger, 
            WcConfigManager configManager,
            WebSessionFactory factory)
    {
        setUpTests(logger, configManager, factory);
    }

}