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