SlideShare a Scribd company logo
1 of 29
Download to read offline
xUnit ํ…Œ์ŠคํŠธ ํŒจํ„ด
7์žฅ
xUnit ๊ธฐ์ดˆ
      ohyecloudyhttp://ohyecloudy.com
     ์•„๊ฟˆ์‚ฌhttp://cafe.naver.com/architect1.cafe
                                 2010.07.31
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
 ํ…Œ์ŠคํŠธ ์ •์˜
 ํ”ฝ์Šค์ฒ˜fixture?
 ์Šค์œ„ํŠธsuite ์ •์˜
 ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
 ํ…Œ์ŠคํŠธ ๋ช…๋ น
 ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
ํ…Œ์ŠคํŠธ ์ž๋™ ํ”„๋ ˆ์ž„์›Œํฌ
 ๋‹ค์Œ ์š”๊ตฌ์‚ฌํ•ญ 4๊ฐœ๋ฅผ ๋งŒ์กฑ
1. ํ…Œ์ŠคํŠธ๋ฅผ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋กœ ๋ช…์‹œ
TEST(FactorialTest, Negative) {
  EXPECT_EQ(1, Factorial(-5));
  EXPECT_EQ(1, Factorial(-1));
  EXPECT_TRUE(Factorial(-10) > 0);
}
2. ๋‹จ์–ธ ๋ฉ”์†Œ๋“œassert method๋กœ ๊ธฐ๋Œ€ ๊ฐ’ ๋ช…์‹œ
TEST(FactorialTest, Negative) {
  EXPECT_EQ(1, Factorial(-5));
  EXPECT_EQ(1, Factorial(-1));
  EXPECT_TRUE(Factorial(-10) > 0);
}


    ๊ธฐ๋Œ€ ๊ฐ’        ์‹ค์ œ ๊ณ„์‚ฐ๋œ ๊ฐ’
3. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ๋ชจ์•„๋‘๊ธฐ
BOOST_AUTO_TEST_SUITE (stringtest)

BOOST_AUTO_TEST_CASE (test1)
{
  mystring s;                        stringtest ์Šค์œ„ํŠธ๋ฅผ
  BOOST_CHECK(s.size() == 0);        ์‹คํ–‰ํ•˜๋ฉด
}
                                     test1, test2 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
BOOST_AUTO_TEST_CASE (test2)         ์‹คํ–‰.
{
  mystring s;
  s.setbuffer("hello world");
  BOOST_REQUIRE_EQUAL ('h', s[0]);
}

BOOST_AUTO_TEST_SUITE_END ()
4. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ  ๋ฐ›๊ธฐ
int main(int argc, char **argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}
์ฆ‰,
ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด
ํ…Œ์ŠคํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ 
๋‹จ์–ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ธฐ๋Œ€ ๊ฐ’์„ ์ •ํ•˜๋ฉฐ
ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์ง€์›ํ•˜๊ณ 
ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”
ํ…Œ์ŠคํŠธ ์ž๋™ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ xUnit์ด๋ผ ํ•œ๋‹ค.
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
  ํ…Œ์ŠคํŠธ ์ •์˜
  ํ”ฝ์Šค์ฒ˜fixture?
  ์Šค์œ„ํŠธsuite ์ •์˜
  ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
  ํ…Œ์ŠคํŠธ ๋ช…๋ น
  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
struct F {
    F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
    ~F()         { BOOST_TEST_MESSAGE( "teardown fixture" ); }

     int i;
};

BOOST_FIXTURE_TEST_CASE( test_case1, F ) {
    BOOST_CHECK( i == 1 );
    ++i;
}

BOOST_FIXTURE_TEST_CASE( test_case2, F ) {
    BOOST_CHECK_EQUAL( i, 1 );
}
                              ์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ์„ค๋ช…
                                 ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ์„ค์น˜
                                 SUT ์‹คํ–‰
                                 ๋‹จ์–ธ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
                                 ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ํ•ด์ฒด
struct F {
    F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
    ~F()         { BOOST_TEST_MESSAGE( "teardown fixture" ); }

     int i;
};

BOOST_FIXTURE_TEST_CASE( test_case1, F ) {
    BOOST_CHECK( i == 1 );
    ++i;
}

BOOST_FIXTURE_TEST_CASE( test_case2, F ) {
    BOOST_CHECK_EQUAL( i, 1 );
}
                                  ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ์„ค์น˜
                                      ์ธ๋ผ์ธ ์„ค์น˜ In-line Setup
                                      ์œ„์ž„ ์„ค์น˜ Delegated Setup
                                      ์•”๋ฌต์  ์„ค์น˜ Implicit Setup
struct F {
    F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
    ~F()         { BOOST_TEST_MESSAGE( "teardown fixture" ); }

     int i;
};

BOOST_FIXTURE_TEST_CASE( test_case1, F ) {
    BOOST_CHECK( i == 1 );
    ++i;
}

BOOST_FIXTURE_TEST_CASE( test_case2, F ) {
    BOOST_CHECK_EQUAL( i, 1 );
}                                        SUT ์‹คํ–‰
struct F {
    F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
    ~F()         { BOOST_TEST_MESSAGE( "teardown fixture" ); }

     int i;
};

BOOST_FIXTURE_TEST_CASE( test_case1, F ) {
    BOOST_CHECK( i == 1 );
    ++i;
}

BOOST_FIXTURE_TEST_CASE( test_case2, F ) {
    BOOST_CHECK_EQUAL( i, 1 );
}

                      ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ํ•ด์ฒด
                          ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ํ•ด์ฒด Garbage-Collected Teardown
                          ์ธ๋ผ์ธ ํ•ด์ฒด In-line Teardown
                          ์•”๋ฌต์  ํ•ด์ฒด Implicit Teardown
                          ์ž๋™ ํ•ด์ฒด Automated Teardown
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
  ํ…Œ์ŠคํŠธ ์ •์˜
  ํ”ฝ์Šค์ฒ˜fixture?
  ์Šค์œ„ํŠธsuite ์ •์˜
  ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
  ํ…Œ์ŠคํŠธ ๋ช…๋ น
  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
SUT๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ
    ์„ค์น˜, ํ•ด์ฒด๋ฅผ ์ฑ…์ž„์ง„๋‹ค.



class FooTest : public ::testing::Test {
protected:
   virtual void SetUp() { ... }
   virtual void TearDown() { ... }
};

TEST_F(FooTest, Test1) {
  ...
}

TEST_F(FooTest, Test2) {
  ...
}
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
  ํ…Œ์ŠคํŠธ ์ •์˜
  ํ”ฝ์Šค์ฒ˜fixture?
  ์Šค์œ„ํŠธsuite ์ •์˜
  ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
  ํ…Œ์ŠคํŠธ ๋ช…๋ น
  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ
 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋˜๋Š” ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์ปจํ…Œ์ด๋„ˆ
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
  ํ…Œ์ŠคํŠธ ์ •์˜
  ํ”ฝ์Šค์ฒ˜fixture?
  ์Šค์œ„ํŠธsuite ์ •์˜
  ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
  ํ…Œ์ŠคํŠธ ๋ช…๋ น
  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
 ํ…Œ์ŠคํŠธ ์ •์˜
 ํ”ฝ์Šค์ฒ˜fixture?
 ์Šค์œ„ํŠธsuite ์ •์˜
 ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
 ํ…Œ์ŠคํŠธ ๋ช…๋ น
 ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰.
 ๊ฐ์ž ์‹คํ–‰ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด?
 ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰.


Command ํŒจํ„ด
 ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‹คํ–‰
 โ€˜๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒโ€™๋ฅผ ์ˆจ๊ธด๋‹ค
TEST(VectorTest, Clear) {
    // ์–ด์ฉŒ๊ณ  ์ €์ฉŒ๊ณ ..
}




 class VectorTest_Clear_Test : public ::testing::Test {
    ...
 private:
    virtual void TestBody() {
        // ์–ด์ฉŒ๊ณ  ์ €์ฉŒ๊ณ ..
    }
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
 ํ…Œ์ŠคํŠธ ์ •์˜
 ํ”ฝ์Šค์ฒ˜fixture?
 ์Šค์œ„ํŠธsuite ์ •์˜
 ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
 ํ…Œ์ŠคํŠธ ๋ช…๋ น
 ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์—๋Š”
 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์„ ์ˆ˜๋„
 ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜๋„


Composite ํŒจํ„ด
 ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ทจ๊ธ‰
   ์ปจํ…Œ์ด๋„ˆ์™€ ์›์†Œ
xUnit?
์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ
 ํ…Œ์ŠคํŠธ ์ •์˜
 ํ”ฝ์Šค์ฒ˜fixture?
 ์Šค์œ„ํŠธsuite ์ •์˜
 ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ
xUnit ๋‚ด๋ถ€
 ํ…Œ์ŠคํŠธ ๋ช…๋ น
 ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด
์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
์ ‚์—ญ ํ”„๋กœ์‹œ์ €์ธ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ

ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ํ”„๋กœ์‹œ์ €
 ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋“ค์˜ ๋ฐฐ์—ด์„ ์ธ์ž๋กœ


๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€
 Working Effectively with Legacy Code : Chapter 19 ์ฐธ๊ณ 
reference
โ€ข google test
   โ€“ http://code.google.com/p/googletest/
โ€ข boost
  โ€“ http://www.boost.org/
โ€ข ์˜คํ”ˆ ์†Œ์Šค C/C++ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋„๊ตฌ, Part 1
  โ€“ http://www.ibm.com/developerworks/kr/library/au-ctools1_boost/
๋
xUnitTestPattern/chapter7

More Related Content

What's hot

(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก
(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก
(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก
ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...
(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...
(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...
ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)
๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)
๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)
SeongHyun Ahn
ย 
AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019
AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019
AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019
Kenneth Ceyer
ย 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Ryan Park
ย 
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
Esun Kim
ย 
(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...
(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...
(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...
ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 

What's hot (19)

(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก
(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก
(SQL์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ, ์ฟผ๋ฆฌ์ตœ์ ํ™” for SQLํŠœ๋‹)SQL์ฟผ๋ฆฌ์ž‘์„ฑTip,์ตœ์ ํ™”ํŒ,์ตœ์ ํ™”๋œSQL์ž‘์„ฑ๋ฐฉ๋ฒ•๊ต์œก
ย 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. Raven
ย 
Python ํ…Œ์ŠคํŠธ ์‹œ์ž‘ํ•˜๊ธฐ
Python ํ…Œ์ŠคํŠธ ์‹œ์ž‘ํ•˜๊ธฐPython ํ…Œ์ŠคํŠธ ์‹œ์ž‘ํ•˜๊ธฐ
Python ํ…Œ์ŠคํŠธ ์‹œ์ž‘ํ•˜๊ธฐ
ย 
Startup JavaScript 3 - ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ
Startup JavaScript 3 - ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ์˜ˆ์™ธ์ฒ˜๋ฆฌStartup JavaScript 3 - ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ
Startup JavaScript 3 - ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ
ย 
(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...
(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...
(์ฟผ๋ฆฌ ๋ณ€ํ™˜, Query Transformation,์„œ๋ธŒ์ฟผ๋ฆฌํ‘ธ์‹œ,SubQuery Pushing)SQLํŠœ๋‹์„ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๋“œ๋ผ์ด๋น™์„ ์ œ์–ด...
ย 
๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)
๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)
๋น ๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ3 ์Šคํ„ฐ๋””(ch1~4)
ย 
PHP 7์˜ ์ƒˆ๋กœ์šด ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ ์š”์•ฝ
PHP 7์˜ ์ƒˆ๋กœ์šด ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ ์š”์•ฝPHP 7์˜ ์ƒˆ๋กœ์šด ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ ์š”์•ฝ
PHP 7์˜ ์ƒˆ๋กœ์šด ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ ์š”์•ฝ
ย 
2.Startup JavaScript - ์—ฐ์‚ฐ์ž
2.Startup JavaScript - ์—ฐ์‚ฐ์ž2.Startup JavaScript - ์—ฐ์‚ฐ์ž
2.Startup JavaScript - ์—ฐ์‚ฐ์ž
ย 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
ย 
AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019
AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019
AI ์—ฐ๊ตฌ์ž๋ฅผ ์œ„ํ•œ ํด๋ฆฐ์ฝ”๋“œ - GDG DevFest Seoul 2019
ย 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
ย 
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
ย 
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ์ตœ์ ํ™” NDC2013
ย 
ํŒŒ์ด์ฌ ํ•จ์ˆ˜
ํŒŒ์ด์ฌ ํ•จ์ˆ˜ํŒŒ์ด์ฌ ํ•จ์ˆ˜
ํŒŒ์ด์ฌ ํ•จ์ˆ˜
ย 
Python Unittest
Python UnittestPython Unittest
Python Unittest
ย 
Javascript ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ(Executable Code)์™€ ์‹คํ–‰ ์ฝ˜ํ…์ŠคํŠธ(Execution Context), Lexical En...
Javascript ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ(Executable Code)์™€ ์‹คํ–‰ ์ฝ˜ํ…์ŠคํŠธ(Execution Context), Lexical En...Javascript ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ(Executable Code)์™€ ์‹คํ–‰ ์ฝ˜ํ…์ŠคํŠธ(Execution Context), Lexical En...
Javascript ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ(Executable Code)์™€ ์‹คํ–‰ ์ฝ˜ํ…์ŠคํŠธ(Execution Context), Lexical En...
ย 
(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...
(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...
(๊ตญ๋น„์ง€์›/์‹ค์—…์ž๊ต์œก/์žฌ์ง์ž๊ต์œก/์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#13.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyB...
ย 
ํฌํŠธํด๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•œ ๋ชจ๋˜ C++
ํฌํŠธํด๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•œ ๋ชจ๋˜ C++ํฌํŠธํด๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•œ ๋ชจ๋˜ C++
ํฌํŠธํด๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•œ ๋ชจ๋˜ C++
ย 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
ย 

Viewers also liked

Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
knight1128
ย 
๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ
๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ
๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ
Lim SungHyun
ย 
ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0
ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0
ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0
Sangcheol Hwang
ย 
C++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐ
C++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐC++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐ
C++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐ
Heo Seungwook
ย 

Viewers also liked (18)

Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
ย 
Test and ci
Test and ciTest and ci
Test and ci
ย 
C++ Unit Test with Google Testing Framework
C++ Unit Test with Google Testing FrameworkC++ Unit Test with Google Testing Framework
C++ Unit Test with Google Testing Framework
ย 
C++11
C++11C++11
C++11
ย 
Tdd ver.2
Tdd ver.2Tdd ver.2
Tdd ver.2
ย 
TDD
TDDTDD
TDD
ย 
แ„‹แ…ซ Swiftแ„…แ…ณแ†ฏ ํ•ด์•ผํ• ๊นŒ์š”?
แ„‹แ…ซ Swiftแ„…แ…ณแ†ฏ ํ•ด์•ผํ• ๊นŒ์š”?แ„‹แ…ซ Swiftแ„…แ…ณแ†ฏ ํ•ด์•ผํ• ๊นŒ์š”?
แ„‹แ…ซ Swiftแ„…แ…ณแ†ฏ ํ•ด์•ผํ• ๊นŒ์š”?
ย 
๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ
๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ
๊ณต๊ฐ์„ธ๋ฏธ๋‚˜ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ
ย 
แ„‘แ…กแ„แ…ณแ„’แ…ตแ„‹แ…ฅ Realm แ„‰แ…กแ„‹แ…ญแ†ผ แ„‰แ…กแ„…แ…จ
แ„‘แ…กแ„แ…ณแ„’แ…ตแ„‹แ…ฅ Realm แ„‰แ…กแ„‹แ…ญแ†ผ แ„‰แ…กแ„…แ…จแ„‘แ…กแ„แ…ณแ„’แ…ตแ„‹แ…ฅ Realm แ„‰แ…กแ„‹แ…ญแ†ผ แ„‰แ…กแ„…แ…จ
แ„‘แ…กแ„แ…ณแ„’แ…ตแ„‹แ…ฅ Realm แ„‰แ…กแ„‹แ…ญแ†ผ แ„‰แ…กแ„…แ…จ
ย 
C++๊ณผ TDD
C++๊ณผ TDDC++๊ณผ TDD
C++๊ณผ TDD
ย 
C++ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋น„๋ฒ•
C++ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋น„๋ฒ•C++ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋น„๋ฒ•
C++ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋น„๋ฒ•
ย 
KGC2010 - ๋‚ก์€ ์ฝ”๋“œ์— ๋‹จ์œ„ํ…Œ์ŠคํŠธ ๋„ฃ๊ธฐ
KGC2010 - ๋‚ก์€ ์ฝ”๋“œ์— ๋‹จ์œ„ํ…Œ์ŠคํŠธ ๋„ฃ๊ธฐKGC2010 - ๋‚ก์€ ์ฝ”๋“œ์— ๋‹จ์œ„ํ…Œ์ŠคํŠธ ๋„ฃ๊ธฐ
KGC2010 - ๋‚ก์€ ์ฝ”๋“œ์— ๋‹จ์œ„ํ…Œ์ŠคํŠธ ๋„ฃ๊ธฐ
ย 
ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0
ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0
ํ˜‘์—…๋„๊ตฌ ๋ฐ ์ฃผ์š” Agile practices ์ ์šฉ์‚ฌ๋ก€ v1.0
ย 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
ย 
C++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐ
C++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐC++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐ
C++ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋„์ž…ํ•˜๊ธฐ
ย 
ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•๋ก )
ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•๋ก )ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•๋ก )
ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•๋ก )
ย 
Tour of Vue.js
Tour of Vue.jsTour of Vue.js
Tour of Vue.js
ย 
แ„‰แ…ตแ„Œแ…กแ†จแ„’แ…กแ„Œแ…ก แ„ƒแ…กแ†ซแ„‹แ…ฑแ„แ…ฆแ„‰แ…ณแ„แ…ณ
แ„‰แ…ตแ„Œแ…กแ†จแ„’แ…กแ„Œแ…ก แ„ƒแ…กแ†ซแ„‹แ…ฑแ„แ…ฆแ„‰แ…ณแ„แ…ณแ„‰แ…ตแ„Œแ…กแ†จแ„’แ…กแ„Œแ…ก แ„ƒแ…กแ†ซแ„‹แ…ฑแ„แ…ฆแ„‰แ…ณแ„แ…ณ
แ„‰แ…ตแ„Œแ…กแ†จแ„’แ…กแ„Œแ…ก แ„ƒแ…กแ†ซแ„‹แ…ฑแ„แ…ฆแ„‰แ…ณแ„แ…ณ
ย 

Similar to xUnitTestPattern/chapter7

ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)
ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)
ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)
Suwon Chae
ย 
๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด
๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด
๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด
Suan Lee
ย 
Tdd 4์žฅ
Tdd 4์žฅTdd 4์žฅ
Tdd 4์žฅ
Jong Pil Won
ย 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
cho hyun jong
ย 
Design patterns
Design patternsDesign patterns
Design patterns
df
ย 
Effective unit testing ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏ
Effective unit testing   ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏEffective unit testing   ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏ
Effective unit testing ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏ
YongEun Choi
ย 

Similar to xUnitTestPattern/chapter7 (19)

[2011 04 11]mock_object ์†Œ๊ฐœ
[2011 04 11]mock_object ์†Œ๊ฐœ[2011 04 11]mock_object ์†Œ๊ฐœ
[2011 04 11]mock_object ์†Œ๊ฐœ
ย 
์ž๋ฐ” ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
์ž๋ฐ” ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์ž๋ฐ” ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
์ž๋ฐ” ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
ย 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8
ย 
ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)
ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)
ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์™€ TDD์ž‘์„ฑ ํŒจํ„ด (Testable design and TDD)
ย 
๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด
๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด
๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคํŒจํ„ด
ย 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnit
ย 
์ž๋ฐ”์Šคํ„ฐ๋””(6๊ธฐ) 3
์ž๋ฐ”์Šคํ„ฐ๋””(6๊ธฐ) 3์ž๋ฐ”์Šคํ„ฐ๋””(6๊ธฐ) 3
์ž๋ฐ”์Šคํ„ฐ๋””(6๊ธฐ) 3
ย 
Tdd 4์žฅ
Tdd 4์žฅTdd 4์žฅ
Tdd 4์žฅ
ย 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
ย 
TDD with JUnit 2
TDD with JUnit 2TDD with JUnit 2
TDD with JUnit 2
ย 
Design patterns
Design patternsDesign patterns
Design patterns
ย 
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
ย 
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒBoost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
Boost๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜๋‚ด๋ถ€๊ตฌ์กฐ 20151111 ์„œ์ง„ํƒ
ย 
katalon studio ํˆด์„ ์ด์šฉํ•œ GUI ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ฐ€์ด๋“œ
katalon studio ํˆด์„ ์ด์šฉํ•œ GUI ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ฐ€์ด๋“œkatalon studio ํˆด์„ ์ด์šฉํ•œ GUI ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ฐ€์ด๋“œ
katalon studio ํˆด์„ ์ด์šฉํ•œ GUI ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ฐ€์ด๋“œ
ย 
Okjsp 13์ฃผ๋…„ ๋ฐœํ‘œ์ž๋ฃŒ: ์ƒ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ Test
Okjsp 13์ฃผ๋…„ ๋ฐœํ‘œ์ž๋ฃŒ: ์ƒ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ TestOkjsp 13์ฃผ๋…„ ๋ฐœํ‘œ์ž๋ฃŒ: ์ƒ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ Test
Okjsp 13์ฃผ๋…„ ๋ฐœํ‘œ์ž๋ฃŒ: ์ƒ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ Test
ย 
Android unit testing
Android unit testingAndroid unit testing
Android unit testing
ย 
Io t์—์„œ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋‹จ์œ„ํ…Œ์ŠคํŠธ_์ ‘๊ทผ์‚ฌ๋ก€
Io t์—์„œ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋‹จ์œ„ํ…Œ์ŠคํŠธ_์ ‘๊ทผ์‚ฌ๋ก€Io t์—์„œ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋‹จ์œ„ํ…Œ์ŠคํŠธ_์ ‘๊ทผ์‚ฌ๋ก€
Io t์—์„œ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋‹จ์œ„ํ…Œ์ŠคํŠธ_์ ‘๊ทผ์‚ฌ๋ก€
ย 
Effective unit testing ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏ
Effective unit testing   ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏEffective unit testing   ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏ
Effective unit testing ch3. แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„ƒแ…ฅแ„‡แ…ณแ†ฏ
ย 
(์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œกํ•™์›์ถ”์ฒœ_ํƒ‘ํฌ๋ฆฌ์—๋“€)#10.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
(์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œกํ•™์›์ถ”์ฒœ_ํƒ‘ํฌ๋ฆฌ์—๋“€)#10.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)(์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œกํ•™์›์ถ”์ฒœ_ํƒ‘ํฌ๋ฆฌ์—๋“€)#10.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
(์Šคํ”„๋ง๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œกํ•™์›์ถ”์ฒœ_ํƒ‘ํฌ๋ฆฌ์—๋“€)#10.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
ย 

More from ์ข…๋นˆ ์˜ค

๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ
๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ
๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ
์ข…๋นˆ ์˜ค
ย 
๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ
๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ
๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ
์ข…๋นˆ ์˜ค
ย 
[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
์ข…๋นˆ ์˜ค
ย 
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
์ข…๋นˆ ์˜ค
ย 
Intrusive data structure ์†Œ๊ฐœ
Intrusive data structure ์†Œ๊ฐœIntrusive data structure ์†Œ๊ฐœ
Intrusive data structure ์†Œ๊ฐœ
์ข…๋นˆ ์˜ค
ย 
2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ
2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ
2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ
์ข…๋นˆ ์˜ค
ย 
[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81
[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81
[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81
์ข…๋นˆ ์˜ค
ย 
[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments
์ข…๋นˆ ์˜ค
ย 
๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ
๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ
๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ
์ข…๋นˆ ์˜ค
ย 
[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ
[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ
[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ
์ข…๋นˆ ์˜ค
ย 
LevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ
LevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœLevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ
LevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ
์ข…๋นˆ ์˜ค
ย 
[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น
[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น
[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น
์ข…๋นˆ ์˜ค
ย 
[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ
[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ
[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ
์ข…๋นˆ ์˜ค
ย 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering
์ข…๋นˆ ์˜ค
ย 

More from ์ข…๋นˆ ์˜ค (20)

ํŠธ์œ„ํ„ฐ ๋ด‡ ๊ฐœ๋ฐœ ํ›„๊ธฐ
ํŠธ์œ„ํ„ฐ ๋ด‡ ๊ฐœ๋ฐœ ํ›„๊ธฐํŠธ์œ„ํ„ฐ ๋ด‡ ๊ฐœ๋ฐœ ํ›„๊ธฐ
ํŠธ์œ„ํ„ฐ ๋ด‡ ๊ฐœ๋ฐœ ํ›„๊ธฐ
ย 
์ ๋‹นํ•œ ์Šคํ„ฐ๋”” ๋ฐœํ‘œ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ 2.0
์ ๋‹นํ•œ ์Šคํ„ฐ๋”” ๋ฐœํ‘œ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ 2.0์ ๋‹นํ•œ ์Šคํ„ฐ๋”” ๋ฐœํ‘œ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ 2.0
์ ๋‹นํ•œ ์Šคํ„ฐ๋”” ๋ฐœํ‘œ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ 2.0
ย 
ํŽ˜๋ฆฌ ์ˆ˜์—ด(Farey sequence)
ํŽ˜๋ฆฌ ์ˆ˜์—ด(Farey sequence)ํŽ˜๋ฆฌ ์ˆ˜์—ด(Farey sequence)
ํŽ˜๋ฆฌ ์ˆ˜์—ด(Farey sequence)
ย 
๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ
๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ
๋‚ด๊ฐ€ ๋ณธ ๋ฏธ๋“œ ์ด์•ผ๊ธฐ
ย 
๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ
๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ
๋น„ํŠธ ๊ฒฝ์ œ์™€ ๊ณต์งœ
ย 
[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
[NDC12] ๊ฒŒ์ž„ ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
ย 
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
[Windows via c/c++] 4์žฅ ํ”„๋กœ์„ธ์Šค
ย 
Intrusive data structure ์†Œ๊ฐœ
Intrusive data structure ์†Œ๊ฐœIntrusive data structure ์†Œ๊ฐœ
Intrusive data structure ์†Œ๊ฐœ
ย 
2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ
2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ
2011 ์•„๊ฟˆ์‚ฌ ์˜ค์ „๋ฐ˜ ํฌ์ŠคํŠธ๋ชจํ…œ
ย 
[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81
[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81
[ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ์ชฝ์œผ๋กœ ๊ฐ„ ๊นŒ๋‹ญ์€] chap 17, 18, 26, 33, 81
ย 
[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments
ย 
๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ
๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ
๋„˜์ณ๋‚˜๋Š” ์ •๋ณด ์†Œํ™” ๋…ธํ•˜์šฐ
ย 
[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ
[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ
[Domain driven design] 17์žฅ ์ „๋žต์˜ ์ข…ํ•ฉ
ย 
LevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ
LevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœLevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ
LevelDB ๊ฐ„๋‹จํ•œ ์†Œ๊ฐœ
ย 
[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline
ย 
[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น
[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น
[TAOCP] 2.5 ๋™์ ์ธ ์ €์žฅ์†Œ ํ• ๋‹น
ย 
[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary
ย 
[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ
[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ
[TAOCP] 2.2.3 ์—ฐ๊ฒฐ๋œ ํ• ๋‹น - ์œ„์ƒ์ •๋ ฌ
ย 
[TAOCP] 1.3.1 MIX ์„ค๋ช…
[TAOCP] 1.3.1 MIX ์„ค๋ช…[TAOCP] 1.3.1 MIX ์„ค๋ช…
[TAOCP] 1.3.1 MIX ์„ค๋ช…
ย 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering
ย 

xUnitTestPattern/chapter7

  • 1. xUnit ํ…Œ์ŠคํŠธ ํŒจํ„ด 7์žฅ xUnit ๊ธฐ์ดˆ ohyecloudyhttp://ohyecloudy.com ์•„๊ฟˆ์‚ฌhttp://cafe.naver.com/architect1.cafe 2010.07.31
  • 2. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 3. ํ…Œ์ŠคํŠธ ์ž๋™ ํ”„๋ ˆ์ž„์›Œํฌ ๋‹ค์Œ ์š”๊ตฌ์‚ฌํ•ญ 4๊ฐœ๋ฅผ ๋งŒ์กฑ
  • 4. 1. ํ…Œ์ŠคํŠธ๋ฅผ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋กœ ๋ช…์‹œ TEST(FactorialTest, Negative) { EXPECT_EQ(1, Factorial(-5)); EXPECT_EQ(1, Factorial(-1)); EXPECT_TRUE(Factorial(-10) > 0); }
  • 5. 2. ๋‹จ์–ธ ๋ฉ”์†Œ๋“œassert method๋กœ ๊ธฐ๋Œ€ ๊ฐ’ ๋ช…์‹œ TEST(FactorialTest, Negative) { EXPECT_EQ(1, Factorial(-5)); EXPECT_EQ(1, Factorial(-1)); EXPECT_TRUE(Factorial(-10) > 0); } ๊ธฐ๋Œ€ ๊ฐ’ ์‹ค์ œ ๊ณ„์‚ฐ๋œ ๊ฐ’
  • 6. 3. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ๋ชจ์•„๋‘๊ธฐ BOOST_AUTO_TEST_SUITE (stringtest) BOOST_AUTO_TEST_CASE (test1) { mystring s; stringtest ์Šค์œ„ํŠธ๋ฅผ BOOST_CHECK(s.size() == 0); ์‹คํ–‰ํ•˜๋ฉด } test1, test2 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค BOOST_AUTO_TEST_CASE (test2) ์‹คํ–‰. { mystring s; s.setbuffer("hello world"); BOOST_REQUIRE_EQUAL ('h', s[0]); } BOOST_AUTO_TEST_SUITE_END ()
  • 7. 4. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ณด๊ณ  ๋ฐ›๊ธฐ int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
  • 8. ์ฆ‰, ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‹จ์–ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ธฐ๋Œ€ ๊ฐ’์„ ์ •ํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์ง€์›ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ž๋™ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ xUnit์ด๋ผ ํ•œ๋‹ค.
  • 9. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 10. struct F { F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); } ~F() { BOOST_TEST_MESSAGE( "teardown fixture" ); } int i; }; BOOST_FIXTURE_TEST_CASE( test_case1, F ) { BOOST_CHECK( i == 1 ); ++i; } BOOST_FIXTURE_TEST_CASE( test_case2, F ) { BOOST_CHECK_EQUAL( i, 1 ); } ์ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ์„ค๋ช… ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ์„ค์น˜ SUT ์‹คํ–‰ ๋‹จ์–ธ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ํ•ด์ฒด
  • 11. struct F { F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); } ~F() { BOOST_TEST_MESSAGE( "teardown fixture" ); } int i; }; BOOST_FIXTURE_TEST_CASE( test_case1, F ) { BOOST_CHECK( i == 1 ); ++i; } BOOST_FIXTURE_TEST_CASE( test_case2, F ) { BOOST_CHECK_EQUAL( i, 1 ); } ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ์„ค์น˜ ์ธ๋ผ์ธ ์„ค์น˜ In-line Setup ์œ„์ž„ ์„ค์น˜ Delegated Setup ์•”๋ฌต์  ์„ค์น˜ Implicit Setup
  • 12. struct F { F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); } ~F() { BOOST_TEST_MESSAGE( "teardown fixture" ); } int i; }; BOOST_FIXTURE_TEST_CASE( test_case1, F ) { BOOST_CHECK( i == 1 ); ++i; } BOOST_FIXTURE_TEST_CASE( test_case2, F ) { BOOST_CHECK_EQUAL( i, 1 ); } SUT ์‹คํ–‰
  • 13. struct F { F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); } ~F() { BOOST_TEST_MESSAGE( "teardown fixture" ); } int i; }; BOOST_FIXTURE_TEST_CASE( test_case1, F ) { BOOST_CHECK( i == 1 ); ++i; } BOOST_FIXTURE_TEST_CASE( test_case2, F ) { BOOST_CHECK_EQUAL( i, 1 ); } ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜ ํ•ด์ฒด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ํ•ด์ฒด Garbage-Collected Teardown ์ธ๋ผ์ธ ํ•ด์ฒด In-line Teardown ์•”๋ฌต์  ํ•ด์ฒด Implicit Teardown ์ž๋™ ํ•ด์ฒด Automated Teardown
  • 14. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 15. SUT๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ ์„ค์น˜, ํ•ด์ฒด๋ฅผ ์ฑ…์ž„์ง„๋‹ค. class FooTest : public ::testing::Test { protected: virtual void SetUp() { ... } virtual void TearDown() { ... } }; TEST_F(FooTest, Test1) { ... } TEST_F(FooTest, Test2) { ... }
  • 16. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 17. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋˜๋Š” ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์ปจํ…Œ์ด๋„ˆ
  • 18. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 19.
  • 20. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 21. ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰. ๊ฐ์ž ์‹คํ–‰ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด? ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰. Command ํŒจํ„ด ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‹คํ–‰ โ€˜๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒโ€™๋ฅผ ์ˆจ๊ธด๋‹ค
  • 22. TEST(VectorTest, Clear) { // ์–ด์ฉŒ๊ณ  ์ €์ฉŒ๊ณ .. } class VectorTest_Clear_Test : public ::testing::Test { ... private: virtual void TestBody() { // ์–ด์ฉŒ๊ณ  ์ €์ฉŒ๊ณ .. }
  • 23. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 24. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ Composite ํŒจํ„ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ทจ๊ธ‰ ์ปจํ…Œ์ด๋„ˆ์™€ ์›์†Œ
  • 25. xUnit? ์ตœ์†Œํ•œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ ํ…Œ์ŠคํŠธ ์ •์˜ ํ”ฝ์Šค์ฒ˜fixture? ์Šค์œ„ํŠธsuite ์ •์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฒฐ๊ณผ xUnit ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ช…๋ น ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๊ฐ์ฒด ์ ƒ์ฐจ์  ์„ธ์ƒ์—์„œ์˜ xUnit
  • 26. ์ ‚์—ญ ํ”„๋กœ์‹œ์ €์ธ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ํ”„๋กœ์‹œ์ € ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋“ค์˜ ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ Working Effectively with Legacy Code : Chapter 19 ์ฐธ๊ณ 
  • 27. reference โ€ข google test โ€“ http://code.google.com/p/googletest/ โ€ข boost โ€“ http://www.boost.org/ โ€ข ์˜คํ”ˆ ์†Œ์Šค C/C++ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋„๊ตฌ, Part 1 โ€“ http://www.ibm.com/developerworks/kr/library/au-ctools1_boost/