TestNG依賴注釋和依賴注入

依賴注釋

@Test中的dependsOnMethods或dependsOnGroups屬性

這兩種依賴:

  • Hard dependencies(硬依賴)

所有的被依賴方法必須成功運行楞泼。只要有一個出問題,測試就不會被調(diào)用,并且在報告中被標記為SKIP疯搅。

  • Soft dependencies(軟依賴)

即便是有些依賴方法失敗了开财,也一樣運行肢预。如果你只是需要保證你的測試方法按照順序執(zhí)行臀防,而不關心他們的依賴方法是否成功涛救。那么這種機制就非常有用牧嫉〖粮可以通過添加"alwaysRun=true"@Test來實現(xiàn)軟依賴。

硬依賴的例子:

@Test
public void serverStartedOk() {}

@Test(dependsOnMethods = { "serverStartedOk" })
public void method1() {}

此例中酣藻,method1()依賴于方法serverStartedOk()曹洽,從而保證 serverStartedOk()總是先運行

也可以讓若干方法依賴于組:

@Test(groups = { "init" })
public void serverStartedOk() {}

@Test(groups = { "init" })
public void initEnvironment() {}

@Test(dependsOnGroups = { "init.* })
public void method1() {}

本例中,method1()依賴于匹配正則表達式"init."的組,由此保證了serverStartedOk()initEnvironment()總是先于method1()被調(diào)用辽剧。

如果使用硬依賴送淆,并且被依賴方法失敗(alwaysRun=false,即默認是硬依賴)怕轿,依賴方法則不是被標記為FAIL而是SKIP偷崩。被跳過的方法會被在最后的報告中標記出來(HTML既不用紅色也不是綠色所表示),主要是被跳過的方法不是必然失敗撞羽,所以被標出來做以區(qū)別阐斜。

無論dependsOnGroups還是dependsOnMethods都可以接受正則表達式作為參數(shù)。對于dependsOnMethods诀紊,如果被依賴的方法有多個重載智听,那么所有的重載方法都會被調(diào)用。如果你只希望使用這些重載中的一個,那么就應該使用 dependsOnGroups

另外到推,也可以在的testng.xml文件中指定的組依賴關系考赛。您可以使用<dependencies>標簽來實現(xiàn)這一點:

<test name="My suite">
  <groups>
    <dependencies>
      <group name="c" depends-on="a  b" />
      <group name="z" depends-on="c" />
    </dependencies>
  </groups>
</test>

依賴注入

TestNG的支持兩種不同類型的依賴注入:本機(由TestNG的本身執(zhí)行)和外部(通過依賴注入框架,如Guice)

本地依賴注入

TestNG 允許你在自己的方法中聲明額外的參數(shù)莉测。這時颜骤,TestNG會自動使用正確的值填充這些參數(shù)。依賴注入就使用在這種地方:

  • 任何@Before@Test方法可以聲明一個類型為ITestContext的參數(shù)捣卤。

  • 任何@After都可以聲明一個類型為ITestResult的單數(shù)忍抽,它代表了剛剛運行的測試方法。

  • 任何@Before@After方法都能夠聲明類型為XmlTest的參數(shù)董朝,它包含了當前的<test>參數(shù)鸠项。

  • 任何@BeforeMethod可以聲明一個類型為java.lang.reflect.Method的參數(shù)。這個參數(shù)會接收 @BeforeMethod完成調(diào)用的時候馬上就被調(diào)用的那個測試方法當做它的值子姜。

  • 任何@BeforeMethod可以聲明一個類型為Object[]的參數(shù)祟绊。這個參數(shù)會包含要被填充到下一個測試方法中的參數(shù)的列表,它既可以又 TestNG 注入哥捕,例如java.lang.reflect.Method或者來自@DataProvider牧抽。

  • 任何@DataProvider可以聲明一個類型為ITestContextjava.lang.reflect.Method的參數(shù)。后一種類型的參數(shù)遥赚,會收到即將調(diào)用的方法作為它的值扬舒。

可以使用@NoInjection關閉注釋:

public class NoInjectionTest {

  @DataProvider(name = "provider")
  public Object[][] provide() throws Exception {
      return new Object[][] { { CC.class.getMethod("f") } };
  }

  @Test(dataProvider = "provider")
  public void withoutInjection(@NoInjection Method m) {
      Assert.assertEquals(m.getName(), "f");
  }

  @Test(dataProvider = "provider")
  public void withInjection(Method m) {
      Assert.assertEquals(m.getName(), "withInjection");
  }
}

Guice依賴注入

estNG給一個簡單的方法來與Guice模塊注入測試對象:

@Guice(modules = GuiceExampleModule.class)
public class GuiceTest extends SimpleBaseTest {

  @Inject
  ISingleton m_singleton;

  @Test
  public void singletonShouldWork() {
    m_singleton.doSomething();
  }

}

在這個例子中,GuiceExampleModule被預期綁定到ISingleton接口的一些具體的類:

public class GuiceExampleModule implements Module {

  @Override
  public void configure(Binder binder) {
    binder.bind(ISingleton.class).to(ExampleSingleton.class).in(Singleton.class);
  }

}

如果在指定的模塊實例化你的測試類需要更多的靈活性凫佛,可以指定一個模塊工廠:

@Guice(moduleFactory = ModuleFactory.class)
public class GuiceModuleFactoryTest {

  @Inject
  ISingleton m_singleton;

  @Test
  public void singletonShouldWork() {
    m_singleton.doSomething();
  }
}

模塊工廠需要實現(xiàn)該IModuleFactory接口:

public interface IModuleFactory {
 /**
   * @param context The current test context
   * @param testClass The test class
   *
   * @return The Guice module that should be used to get an instance of this
   * test class.
   */
  Module createModule(ITestContext context, Class<?> testClass);
}

工廠將會通過了測試環(huán)境和TestNG需要實例化測試類的一個實例讲坎。
createModule方法應該返回一個Guice模塊,就會知道如何實例化這個測試類愧薛∫赂希可以使用測試環(huán)境,以了解環(huán)境的詳細信息厚满,如在規(guī)定的testng.xml設置參數(shù)等...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碧磅,隨后出現(xiàn)的幾起案子碘箍,更是在濱河造成了極大的恐慌,老刑警劉巖鲸郊,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丰榴,死亡現(xiàn)場離奇詭異,居然都是意外死亡秆撮,警方通過查閱死者的電腦和手機四濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盗蟆,你說我怎么就攤上這事戈二。” “怎么了喳资?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵觉吭,是天一觀的道長。 經(jīng)常有香客問我仆邓,道長鲜滩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任节值,我火速辦了婚禮徙硅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搞疗。我一直安慰自己嗓蘑,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布贴汪。 她就那樣靜靜地躺著脐往,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扳埂。 梳的紋絲不亂的頭發(fā)上业簿,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音阳懂,去河邊找鬼梅尤。 笑死,一個胖子當著我的面吹牛岩调,可吹牛的內(nèi)容都是我干的巷燥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼号枕,長吁一口氣:“原來是場噩夢啊……” “哼缰揪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起葱淳,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤钝腺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赞厕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艳狐,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年皿桑,在試婚紗的時候發(fā)現(xiàn)自己被綠了毫目。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬啡。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镀虐,靈堂內(nèi)的尸體忽然破棺而出箱蟆,到底是詐尸還是另有隱情,我是刑警寧澤粉私,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布顽腾,位于F島的核電站,受9級特大地震影響诺核,放射性物質(zhì)發(fā)生泄漏抄肖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一窖杀、第九天 我趴在偏房一處隱蔽的房頂上張望暂题。 院中可真熱鬧蝌戒,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝉揍。三九已至趋箩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铆隘,已是汗流浹背卓舵。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膀钠,地道東北人掏湾。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像肿嘲,于是被迫代替她去往敵國和親融击。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 感謝原作者的奉獻雳窟,原作者博客地址:http://blog.csdn.net/zhu_ai_xin_520/arti...
    狼孩閱讀 14,006評論 1 35
  • 此文為本人學習guice的過程中尊浪,翻譯的官方文檔,如有不對的地方封救,歡迎指出拇涤。另外還有一些附件說明、吐槽兴泥、疑問點,持...
    李眼鏡閱讀 3,468評論 2 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理虾宇,服務發(fā)現(xiàn)搓彻,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 墨菲定律:錯誤一定會發(fā)生。 文中講的一個笑話:算命先生前一天說明天你會打破一個花瓶旭贬。男人第二天就一直守著花瓶也不去...
    songkun閱讀 522評論 0 0
  • 今天接團怔接,長線團(克貴)
    飛揚的心靈閱讀 110評論 0 0