我正在尝试在子类中使用 spring 通过 @Value 读取的一些属性。这些属性在父类中被正确读取,但在子类中最终为 null。我使用的是注释配置而不是 xml 配置。例如,我试图在扩展 WebTemplate 的 TestListeners 中使用来自 WebTemplate 的属性 reportType:@ContextConfiguration(classes = AppConfig.class)@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)public class WebTemplate extends AbstractTestNGSpringContextTests { @Autowired protected SeleniumDriver driver; @Value("${environment.url}") protected String environmentUrl; @Value("${report.type}") protected String reportType; @Value("${auto.open.report}") protected String autoOpenReport;}这里的属性最终为空。如果我在 WebTemplate 中使用它们,一切都很好并且可以工作。public class TestListener extends WebTemplate implements ITestListener { @Override public void onTestStart(ITestResult result) { System.out.println(reportType); System.out.println(autoOpenReport);我还考虑过 Webtemplate 对象在测试周期的某个时候被破坏,并试图在每次测试开始时将它们存储在子类中,从 super 调用它们。这也没有用:public class TestListener extends WebTemplate implements ITestListener { private String reportType; private String autoOpenReport; @Override public void onTestStart(ITestResult result) { this.reportType = super.reportType; this.autoOpenReport = super.autoOpenReport;有什么建议吗?
2 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
更新:经过一番调查发现问题实际上是由弹簧引起的。类 WebTemplate 带有注释@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
。据我了解,这会在每次测试之后和进入听众之前立即破坏整个 spring 环境。因此,当进入各自的 testNg 侦听器时,spring 管理的所有内容都消失了。
我的兴趣是在测试类中只有 PageObjects Autowired,所以我最终从 spring 环境中删除了所有不是 PageObject 的东西。
慕斯王
TA贡献1864条经验 获得超2个赞
您有 2 个类,每个类都扩展,WebTemplate
但是其中一个不由 Spring 管理,因此不会被注入/处理。扩展由 Spring 管理的类这一事实不会自动使创建的实例由 Spring 管理。
你有 2 个类,因此有 2 个不同的对象,它们不共享相同的WebTemplate
属性。它们是 2 个不同的类,因此是实例。
添加回答
举报
0/150
提交
取消