Testng: 클래슀 μˆ˜μ€€μ˜ @Test(enabled=false) 주석은 클래슀의 λͺ¨λ“  λ©”μ„œλ“œλ₯Ό λΉ„ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2011λ…„ 12μ›” 21일  Β·  20μ½”λ©˜νŠΈ  Β·  좜처: cbeust/testng

http://code.google.com/p/testng/issues/detail?id=102 μ—μ„œ 볡사

TestNG 6.3.1λ‘œλ„ ν…ŒμŠ€νŠΈλ¨

μ–΄λ–€ λ‹¨κ³„μ—μ„œ 문제λ₯Ό μž¬ν˜„ν•©λ‹ˆκΉŒ?
λ‹€μŒκ³Ό 같은 ν…ŒμŠ€νŠΈ ν΄λž˜μŠ€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

@Test(ν™œμ„±ν™” = 거짓)
곡개 클래슀 MyTest {
@DataProvider(이름 = "블라")
개인 개체[][] bla() {
μƒˆ 객체 λ°˜ν™˜[][] {
μƒˆλ‘œμš΄ 객체[] { "bla"}
};
}

@Test(dataProvider = "블라")
곡개 무효 blatest(λ¬Έμžμ—΄ bla) {
System.out.println(bla);
}
}

μ˜ˆμƒ 좜λ ₯은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
blatest λ©”μ†Œλ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•Šκ³  μ½˜μ†” 좜λ ₯이 없을 κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€. λŒ€μ‹  blatestκ°€ μ‹€ν–‰λ˜κ³  "bla"κ°€ μΈμ‡„λ©λ‹ˆλ‹€.

μ–΄λ–€ λ²„μ „μ˜ μ œν’ˆμ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?
λ‚˜λŠ” Surefire ν”ŒλŸ¬κ·ΈμΈ 2.7.2λ₯Ό μ‚¬μš©ν•˜μ—¬ maven 2.2.1/3.0.3μ—μ„œ μ‹€ν–‰ν•˜λŠ” testng 5.11/6.0.1둜 ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜μ— μΆ”κ°€ 정보λ₯Ό μ œκ³΅ν•˜μ‹­μ‹œμ˜€.

λͺ¨λ“  20 λŒ“κΈ€

μ•ˆλ…• λ‹ˆμ½œλΌμŠ€,

λ©”μ†Œλ“œμ— @Test λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 경우 이λ₯Ό λ³Ό 수 μžˆμ§€λ§Œ, μ‚¬μš©ν•˜λŠ” μ¦‰μ‹œ(dataProviderλ₯Ό μ‚¬μš©ν•œ μœ„μ˜ μ˜ˆμ—μ„œμ™€ 같이) enabled 속성이 μž¬μ •μ˜λ˜κ³  κΈ°λ³Έκ°’ μ‚¬μ‹€μ΄λ―€λ‘œ 보고 μžˆλŠ” λ™μž‘μž…λ‹ˆλ‹€.

이게 말이 돼?

λ„€, μ„Έλ“œλ¦­μ—κ²Œ κ°μ‚¬ν•©λ‹ˆλ‹€.

클래슀의 주석 @test(enabled=false)κ°€ μ‹€ν–‰μ—μ„œ 클래슀λ₯Ό μ™„μ „νžˆ μ œμ™Έν•œλ‹€λŠ” 잘λͺ»λœ 가정을 ν•©λ‹ˆλ‹€.

μ•½κ°„ 반 μ§κ΄€μ μ΄λΌλŠ” 데 λ™μ˜ν•˜μ§€λ§Œ μ§€κΈˆ λ°”κΎΈκΈ°μ—λŠ” λ„ˆλ¬΄ λŠ¦μ—ˆμŠ΅λ‹ˆλ‹€. μŠ¬ν”„κ²Œλ„...

μ•ˆλ…•, μ„Έλ“œλ¦­!
@Test 주석에 μƒˆ λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜κ³  "enabledClass"와 같은 μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœν•˜κ³  기본적으둜 true둜 μ„€μ •ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ? λ©”μ„œλ“œ μˆ˜μ€€ 주석에 관계없이 전체 클래슀λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λ €λ©΄ 클래슀 μˆ˜μ€€(enabledClass = false)μ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λ©° λ©”μ„œλ“œμ— μΆ”κ°€λœ 경우 λ¬΄μ‹œλ©λ‹ˆλ‹€.
이런 μ‹μœΌλ‘œ μš°λ¦¬λŠ” 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜λ©΄μ„œ λ™μ‹œμ— κ½€ μœ μš©ν•œ κΈ°λŠ₯을 μ œκ³΅ν•  κ²ƒμž…λ‹ˆλ‹€.
μ›ν•˜λŠ” 경우 직접 κ΅¬ν˜„ν•˜κ³  pull μš”μ²­μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

@andronix83 ,

enabled 와 enabledClass μ‚¬μ΄μ˜ λ―Έλ¬˜ν•œ 차이λ₯Ό μ„€λͺ…ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 이것이 더 ν˜Όλž€μŠ€λŸ¬μ›Œμ§ˆκΉŒ κ±±μ •λ©λ‹ˆλ‹€.

ν˜„μž¬ enabled λ™μž‘μ€ κ°€μž₯ μ§κ΄€μ μ΄μ§€λŠ” μ•Šμ§€λ§Œ 이 λ¬Έμ œκ°€ 제기된 횟수둜 νŒλ‹¨ν•˜λ©΄ 일반적으둜 λ¬Έμ œκ°€ λ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(거의 μ—†μŒ).

μ•ˆλ…•ν•˜μ„Έμš” μ„Έλ“œλ¦­μž…λ‹ˆλ‹€.

λ‚˜λŠ” μ‹€μ œλ‘œ μ§€λ‚œ 주에 이 문제λ₯Ό κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€. μ €λŠ” Facebook Graph API에 μ˜μ‘΄ν•˜λŠ” μ›Ή μ„œλ²„μ—μ„œ μΌν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜ν”„ API에 λ„λ‹¬ν•˜λŠ” μ½”λ“œμ— μ˜μ‘΄ν•˜λŠ” 일뢀 ν…ŒμŠ€νŠΈ λ©”μ„œλ“œκ°€ μžˆλŠ” ν…ŒμŠ€νŠΈ ν΄λž˜μŠ€κ°€ μžˆμ—ˆκ³  λ‹€λ₯Έ ν…ŒμŠ€νŠΈ λ©”μ„œλ“œλŠ” ν•΄λ‹Ή μ„œλΉ„μŠ€μ— μ „ν˜€ μ˜μ‘΄ν•  ν•„μš”κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‹€κ°€ ν•œ μ‹œκ°„ λ„˜κ²Œ 페이슀뢁 전체에 정전이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 이둜 인해 이 클래슀의 일뢀 ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λ¨Έμ§€ 개발 νŒ€μ„ 차단 ν•΄μ œ μƒνƒœλ‘œ μœ μ§€ν•˜κΈ° μœ„ν•΄ λ‚΄κ°€ ν•˜κ³  μ‹Άμ—ˆλ˜ 것은 클래슀 μˆ˜μ€€μ—μ„œ @Test(enabled=false) 주석을 톡해 이 클래슀의 λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό μ¦‰μ‹œ λΉ„ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ¬Όλ‘ , 그것은 νš¨κ³Όκ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈ 방법을 ν•˜λ‚˜μ”© λΉ„ν™œμ„±ν™”ν•΄μ•Ό ν–ˆκ³ , 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 ν•„μš”ν•œ 것보닀 더 λ§Žμ€ μ‹œκ°„μ΄ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

μ΄μƒμ μœΌλ‘œ TestNGλŠ” JUnit의 @Ignore 주석과 μœ μ‚¬ν•œ κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€. http://junit.sourceforge.net/javadoc/org/junit/Ignore.html. κ°„λ‹¨νžˆ λ§ν•΄μ„œ κ°œλ°œμžλŠ” μ‹€μ œλ‘œ 이 κΈ°λŠ₯을 μ›ν•©λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

@ecbrodie 이것은 이미 μ§€μ›λ˜μ§€λ§Œ(μ‹œλ„ν•΄λ³΄μ„Έμš”!) κ²½κ³ κ°€ μžˆμŠ΅λ‹ˆλ‹€. @Test 주석이 μžˆλŠ” λͺ¨λ“  κ°œλ³„ λ©”μ„œλ“œλŠ” ν…ŒμŠ€νŠΈλ₯Ό λ‹€μ‹œ ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

@Test(enabled = false)
public class T {
  void f() {} // will not run
}
@Test(enabled = false)
public class T {
  <strong i="10">@Test</strong>
  void f() {} // WILL run!
}

μ΄λŠ” λ©”μ„œλ“œ μˆ˜μ€€μ˜ 속성이 클래슀 μˆ˜μ€€μ—μ„œ μ •μ˜λœ 속성을 μž¬μ •μ˜ν•˜λŠ” 의미 λ•Œλ¬Έμ— λ©”μ„œλ“œ μˆ˜μ€€ @Test 주석은 기본적으둜 κΈ°λ³Έκ°’μ΄λ―€λ‘œ @Test(enabled = true) 라고 λ§ν•©λ‹ˆλ‹€...

λ§žλŠ” 말이닀?

@cbeustλ‹˜ , κ·Έ 예λ₯Ό λ“€μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 그것은 이미 문제λ₯Ό μ΄ν•΄ν•˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ— μ €λ₯Ό μ˜€ν•΄ν•˜μ‹  것 κ°™μŠ΅λ‹ˆλ‹€. λ‚΄κ°€ λ§Œλ“€λ €κ³  ν–ˆλ˜ μš”μ μ€ @Test(enabled=true/false)의 ν˜„μž¬ 의미 체계와 λ©”μ„œλ“œμ— μ„€μ •λœ λͺ¨λ“  것을 λ¬΄μ‹œν•˜κΈ° μœ„ν•΄ 클래슀 μˆ˜μ€€μ—μ„œ ν™œμ„±ν™”λœ μž¬μ •μ˜λ₯Ό μ‹€μ œλ‘œ μ§€μ •ν•˜λŠ” 방법을 κ°–κ³ μž ν•˜λŠ” μš•κ΅¬μ˜€μŠ΅λ‹ˆλ‹€. μˆ˜μ€€, μ•„λ§ˆλ„ μΌμ’…μ˜ enabledClass 주석 값을 μΆ”κ°€ν•˜λŠ” 것에 λŒ€ν•œ μž…μž₯을 μž¬κ³ ν•΄μ•Ό ν•  λ•Œμž…λ‹ˆλ‹€.

@Test(enabled) 의미 체계λ₯Ό μ‚¬μš©ν•˜μ—¬ μ·¨ν•œ μ›λž˜ μ ‘κ·Ό 방식에 λŒ€ν•΄ μ•½κ°„μ˜ 경멸을 λ‚˜νƒ€λ‚΄λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 그것이 사싀이라면 κ·Έ 의미λ₯Ό 더 직관적이라고 λŠλΌλŠ” κ²ƒμœΌλ‘œ κ°€μ Έμ˜€μ§€ μ•Šκ² μŠ΅λ‹ˆκΉŒ?

λ™μ˜ν•©λ‹ˆλ‹€. @Test(enabledClass = false) 이 μ˜λ―Έκ°€ 있으며 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ κΉ¨λœ¨λ¦¬μ§€ μ•Šκ³  μ œμ•ˆμ„ κ΅¬ν˜„ν•˜λŠ” μœ μΌν•œ 방법이라고 μƒκ°ν•©λ‹ˆλ‹€. λ„ˆλ¬΄ μ‰¬μ›Œμ•Ό ν•©λ‹ˆλ‹€.

κ·€ν•˜ λ˜λŠ” @juherr κ°€ PR μ œμΆœμ— 관심이 μžˆμœΌμ‹­λ‹ˆκΉŒ?

기뢄이 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€. ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” μƒˆ 속성을 μΆ”κ°€ν•˜λŠ” 아이디어가 λ§ˆμŒμ— 듀지 μ•ŠμŠ΅λ‹ˆλ‹€.
그런 λ‹€μŒ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ μ†ŒμŠ€λ₯Ό μˆ˜μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— enable=false λŠ” μ†ŒμŠ€μ—μ„œ μ‚¬μš©ν•  λ•Œ λ‚˜μœ μŠ΅κ΄€μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.
IMO, 클래슀 선택을 μ·¨μ†Œν•˜λ €λ©΄ testng.xml λ₯Ό λŒ€μ‹  μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
@ecbrodie ν…ŒμŠ€νŠΈλ₯Ό μ–΄λ–»κ²Œ μ‹€ν–‰ν•©λ‹ˆκΉŒ?

BTW, λŒ€μ‹  λ‚΄κ°€ μ œμ•ˆν•˜λŠ” 것은 ν΄λž˜μŠ€μ—μ„œ enable=false 의 κΈ°λ³Έ λ™μž‘μ„ μž¬μ •μ˜ν•˜λŠ” IAnnotationTransformer κ΅¬ν˜„μ„ μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
IAnnotationTransformer λ‹¨μ§€μ—μžˆλ‹€ enable=false μžμ‹ μ˜ ν΄λž˜μŠ€κ°€μžˆλŠ” 경우 λͺ¨λ“  ν…ŒμŠ€νŠΈ enable=false .
이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μ†μƒμ‹œν‚€μ§€ μ•ŠμœΌλ©° νŠΉμ • λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
@cbeust μ–΄λ–»κ²Œ μƒκ°ν•˜μ„Έμš”?

@juherr Cool PR, IAnnotationTransformer 둜 ν•˜λŠ” 것은 정말 κ°„λ‹¨ν•©λ‹ˆλ‹€.

λ‚΄ μœ μΌν•œ κ΄€μ‹¬μ‚¬λŠ” μ‚¬μš©μžμ—κ²Œ enabledClass 속성과 달리 μ‚¬μš©ν•˜κΈ°κ°€ 쑰금 더 μ‹ λΉ„λ‘­λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

클래슀 μˆ˜μ€€( suiteName , testName )μ—μ„œλ§Œ μ μš©ν•  수 μžˆλŠ” λͺ‡ 가지 속성이 이미 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ§ν–ˆλ“―μ΄, λ‚˜λŠ” 유슀 μΌ€μ΄μŠ€λ₯Ό μ’‹μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그리고 μ§€λ‚œ 4λ…„ λ™μ•ˆ 단 2λͺ…μ—κ²Œλ§Œ 물어봐도 μΆ©λΆ„ν•  것 κ°™μ•„μš” :)

@juherr μΆ©λΆ„ν•©λ‹ˆλ‹€.

@ecbrodie PR에 λŒ€ν•΄ μ–΄λ–»κ²Œ μƒκ°ν•˜μ„Έμš”?

https://github.com/cbeust/testng/pull/816

@cbeust
κ·Έλƒ₯ κΆκΈˆν•©λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” λ‚΄μž₯ AnnotationTransformerλ₯Ό μ œκ³΅ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?

예, #816이 μ œμ•ˆν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

@juherr
κ·Έ PR 정보λ₯Ό κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이것이 λ³‘ν•©λ˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬λŠ” μ΄μœ κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

μ•„λž˜μ™€ 같은 μ‹œλ‚˜λ¦¬μ˜€κ°€ μžˆλŠ” 경우 μ–΄λ–»κ²Œ ν•©λ‹ˆκΉŒ?

@Test(groups = { "regression", "smoke" }, dependsOnGroups = { "Creation" })
public class EditName {

    @Test(dataProvider="SomeTestData",dataProviderClass=SearchData.class)
    public void TC_1(String Msg) throws Exception{
        System.out.println(Msg);
    }

    @Test(dataProvider="SomeTestData",dataProviderClass=SearchData.class, dependsOnMethods = { "TC_1" }))
    public void TC_2(String Msg) throws Exception{
        System.out.println(Msg);
    }
}
  1. TC_1κ³Ό TC_2λŠ” νšŒκ·€ κ·Έλ£Ήκ³Ό μ—°κΈ° κ·Έλ£Ή λͺ¨λ‘μ— μ†ν•©λ‹ˆκΉŒ?
  2. TC_1κ³Ό TC_2κ°€ λͺ¨λ‘ "Creation" 그룹에 μ’…μ†λ©λ‹ˆκΉŒ?
  3. TC_2λŠ” κ·Έλ£Ή "Creation"κ³Ό TC_1에 μ’…μ†λ©λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ TC_1μ—λ§Œ μ’…μ†λ©λ‹ˆκΉŒ?

@Rameshwar-Juptimath μƒ˜ν”Œκ³Ό 이 문제의 κ΄€κ³„λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

클래슀 및 λ©”μ„œλ“œ μˆ˜μ€€μ—μ„œ @Test의 직관적이지 μ•Šμ€ λ™μž‘μœΌλ‘œ 인해.
λͺ¨λ²” μ‚¬λ‘€λ‘œ 무엇을 ꢌμž₯ν•΄μ•Ό ν•©λ‹ˆκΉŒ?
ν…ŒμŠ€νŠΈμ—μ„œ λ‘˜ λ‹€ μ‚¬μš©ν•˜λŠ” 것을 ν”Όν•΄μ•Ό ν•©λ‹ˆκΉŒ?
μš°λ¦¬λŠ” 각각의 κ²½μš°μ— λ‹€λ₯Έ 데이터 κ³΅κΈ‰μžλ₯Ό 가지기 μœ„ν•΄ λ©”μ„œλ“œ μˆ˜μ€€μ—μ„œ λ‹€μ†Œκ°„ μ‚¬μš©ν•˜λ―€λ‘œ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆκΉŒ?
생각?

@aliciatang λ™μž‘μ€ λͺ¨λ“  주석 속성에 λŒ€ν•΄ λ™μΌν•©λ‹ˆλ‹€. λ©”μ„œλ“œμ˜ 값이 클래슀의 값을 μž¬μ •μ˜ν•©λ‹ˆλ‹€.

6.13 μ΄ν›„λ‘œ μ˜ˆμƒν•˜λŠ” λ™μž‘μΈ @Ignore λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. @Ignore λŒ€ν•œ λ¬Έμ„œλŠ” μ—¬κΈ° μ—μ„œ 찾을 수

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰