我正在嘗試在子類中使用 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
提交
取消