CodeGym /ํ–‰๋™ /All lectures for KO purposes /JUnit์—์„œ ์ธ๊ธฐ ์žˆ๋Š” ์ฃผ์„

JUnit์—์„œ ์ธ๊ธฐ ์žˆ๋Š” ์ฃผ์„

All lectures for KO purposes
๋ ˆ๋ฒจ 1 , ๋ ˆ์Šจ 940
์‚ฌ์šฉ ๊ฐ€๋Šฅ

7.1 @Suite ์ฃผ์„

๊ทธ๋ฆฌ๊ณ  ๋” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์„. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ํ™•์‹คํžˆ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฑฐ๊ธฐ์— ์“ฐ์—ฌ์ง„ ๋‚ด์šฉ์„ ์ ์–ด๋„ ์ผ๋ฐ˜์ ์ธ ์šฉ์–ด๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ฃผ์„์ด ์žˆ์Šต๋‹ˆ๋‹ค @Suite. ์˜ˆ:

@Suite @SuiteDisplayName("JUnit Platform Suite Demo") @SelectPackages("com.codegym.test") @IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}

์ด ๊ฒฝ์šฐ @Suite ์ฃผ์„์€ ๋‹ค๋ฅธ ์ฃผ์„๊ณผ ์Œ์„ ์ด๋ฃน๋‹ˆ๋‹ค.

  • SuiteDisplayNameโ€“ ๋กœ๊ทธ์— ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • SelectPackages- ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • IncludeClassNamePatternsโ€“ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ด๋ฆ„์˜ ํŒจํ„ด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์™œ ๊ทธ๋Ÿฐ ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ 50์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰๋œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ปค๋ฐ‹ ํ›„์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„์Œ‰๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ํ›จ์”ฌ ๋” ์œ ์—ฐํ•œ ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

7.2 @Order ์ฃผ์„

๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์ฃผ์„์€ @TestMethodOrder. ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€๋งŒ ํŠน์ • ์ˆœ์„œ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฝค ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ํ˜ธ์ถœํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {

}

๋‘˜์งธ, ๊ฐ ๋ฉ”์„œ๋“œ๋Š” ์„œ์ˆ˜์™€ ํ•จ๊ป˜ ํŠน๋ณ„ํ•œ ์ฃผ์„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

 @Test @Order(1)
    public void firstTest() {
    }

 @Test @Order(2)
    public void secondTest() {
    }
}

๋˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ณ„๋„์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {

}

//sort method names alphabetically, but ignoring case
public class CustomOrder implements MethodOrderer {
    public void orderMethods(MethodOrdererContext context) {
        context.getMethodDescriptors().sort(
        (MethodDescriptor m1, MethodDescriptor m2)->
           m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
    }
}

7.3 @DisplayName ์ฃผ์„

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ ํ…Œ์ŠคํŠธ์— ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋งŽ๊ณ  ํ…Œ์ŠคํŠธ์˜ ํŠน์ˆ˜ ์‹œ๋‚˜๋ฆฌ์˜ค(ํ•˜์œ„ ์ง‘ํ•ฉ)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ํŽธ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ฃผ์„์ด ์žˆ์Šต๋‹ˆ๋‹ค @DisplayName.

์˜ˆ:

@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {

 @Test @DisplayName("Input Validation")
    void inputData() {
    }

 @DisplayName("Checking critical situations") @Test
    void criticalCases() {
    }
}

ํ…Œ์ŠคํŠธ ์ˆœ์„œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ ์ด๋ฆ„๊ณผ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŠน์ˆ˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {

 @Test
    void camelCaseName() {
    }

 static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
        @Override
 public String generateDisplayNameForClass(Class testClass) { return super.generateDisplayNameForClass(testClass).toUpperCase(); } }
}

์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ๋ณด์„ธ์š” :)

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION