2013-12-17 52 views
3

我使用Spring Test與TestNG一起測試我們的DAO,並且我想在某些方法之前運行特定的文本夾具腳本,從而允許在每種方法之後回滾修改,以便測試可以自由地對夾具數據做任何事情。TestNG - 用於特定方法的@BeforeMethod

最初我以爲'組'會適合它,但我已經意識到它們不是爲此而設計的(請參閱此問題:TestNG BeforeMethod with groups)。

有什麼辦法可以配置@BeforeMethod方法只在特定的@Test之前運行?我看到的唯一途徑是解決方法:

  • 定義一個普通的設置方法,並在每個@Test方法開始調用;
  • @BeforeMethod方法與所有依賴它的方法一起移動到新類(頂級或內部類)。

既不是理想的,我想保持我的測試自然分組和清潔,不會因爲缺少替代品而分裂。

+0

爲什麼沒有在線程中提到的解決方案爲您工作?如果你通過團隊跑步,對它有幫助嗎? –

+0

組應該在這裏工作得很好。您將BeforeTest,Test和AfterTest設爲同一組。我知道這個帖子很舊,但只是爲了記錄。也可以給每個方法不同的組。 – patrik

回答

3

測試根本沒有被設計來做到這一點。從技術上說,單個測試應該處理對於自身的冪等性,意味着它設置,測試並取消。這是一個單一的測試。然而,很多測試有時會有相同的設置和取下方法,而其他測試在全部運行之前需要一個設置。這是@Before類型標籤的用途。 如果您不喜歡測試中的設置和拆卸,歡迎您建立自己的系統,但從技術上講,如果某些方法需要特定的設置或拆卸,那真的應該是體現在測試中,因爲它是測試通過的要求。可以調用設置方法,但最終應該明顯的是測試需要特定的設置才能通過。畢竟,如果您使用特定的設置,是不是實際測試狀態而不是代碼?

9

您可以使用類型'java.lang.reflect.Method'添加@BeforeMethod參數。然後TestNG將注入當前測試方法的反射信息,包括方法名稱,您可以用它來切換。

如果添加另一個'Object'參數,您還將獲得測試方法的調用參數。

您可以在TestNG文檔的5.18.1章節中找到TestNG註釋方法的所有可能參數。

+0

這是絕對正確的。感謝這些信息 – virusrocks

相關問題