π Chapter 10: λμνλ 골격
π 골격 μ¬μ© μ€λΉβ
- λμνλ 골격μ ν΅μ¬μ λλ΅μ μΈ μμ€ν ꡬ쑰λ₯Ό μ μνκ³ κ·Έκ²μ μ ν¨μ±μ κ²μ¦ν μ μμ μ λλ‘ μꡬ μ¬νμ μ΄ν΄νλ λ° μ΄λ°μ§νλ κ²μ΄λ€.
π μ΅μ΄ ν μ€νΈβ
- λμνλ 골격μ λ°λμ 경맀 μ€λμ΄νΌ μμ€ν μ λͺ¨λ μ»΄ν¬λνΈ, μ¦ μ¬μ©μ μΈν°νμ΄μ€, μ€λμ΄νΌ μ»΄ν¬λνΈ, 경맀 μλ²μμ ν΅μ λ±μ ν¬κ΄ν΄μΌ νλ€.
- μ°λ¦¬λ ꡬνμ΄ μ΄λ―Έ μ‘΄μ¬νλ κ²μ²λΌ ν μ€νΈλ₯Ό μμ±ν λ€μ ν΄λΉ ꡬνμ΄ λμνλ λ° νμν κ²μ μ±μλκ°λ μμΌλ‘ μμνλ λ°©μμ μ νΈνλ€. (ν¬λ§μ κ΄μΈ‘μ μν νλ‘κ·Έλλ°) ν μ€νΈλ₯Ό κ°μ§κ³ μμΌλ‘ μμ νλ©΄ μμ€ν μ μ΄λ»κ² λμνκ² λ§λ€μ§μ κ΄λ ¨ν 볡μ‘ν¨ λλ¬Έμ λ°λͺ©μ΄ μ‘νλ λμ μμ€ν μ΄ ν΄μΌ ν μΌμ μ§μ€νλ λ° λμμ΄ λλ€.
public class AuctionSniperEndToEndTest {
private final FakeAuctionServer auction = new FakeAuctionServer("item-54321");
private final ApplicationRunner application = new ApplicationRunner();
@Test public void sniperJoinsAuctionUntilAuctionCloses() throws Exception {
auction.startSellingItem(); // 1. 경맀μμ νλͺ©μ ν맀
application.startBiddingIn(auction); // 2. 경맀 μ€λμ΄νΌκ° ν΄μ 경맀μμ μ
μ°°μ μμνλ©΄
auction.hasReceivedJoinRequestFromSniper(); // 3. 경맀μμλ 경맀 μ€λμ΄νΌλ‘λΆν° Join μμ²μ λ°μ κ²μ΄λ€.
auction.announceClosed(); // 4. κ²½λ§€κ° Closeλλ€κ³ μ μΈν λ©΄
application.showsSniperHasLostAuction(); // 5. 경맀 μ€λμ΄νΌλ 경맀μμ λμ°°ν΄ μ€ν¨νμμ 보μ¬μ€ κ²μ΄λ€.
}
}
- μ΄λ€ λ©μλκ° μ΄λ²€νΈλ₯Ό λ°μμμΌ ν
μ€νΈλ₯Ό μ΄λλ€λ©΄ ν΄λΉ λ©μλμ μ΄λ¦μ
startBiddingIn()
κ°μ λͺ λ Ή(command)μ΄ λ κ²μ΄λ€. - λ°λ©΄ μ΄λ€ λ©μλμμ μ΄λ€ μΌμ΄ μΌμ΄λμΌ νλ€κ³ λ¨μ (assert)νλ€λ©΄ ν΄λΉ λ©μλμ μ΄λ¦μ μμ ν(μ§μμ μΈ νν)μ΄ λ κ²μ΄λ€. μλ₯Ό λ€ μ΄
showsSniperHasLostAuction()
λ©μλλ μ ν리μΌμ΄μ μμ 경맀 μνλ₯Ό λμ°° μ€ν¨λ‘ 보μ¬μ£Όμ§ μλλ€λ©΄ μμΈλ₯Ό λμ§ κ²μ΄λ€.
π λͺ κ°μ§ μ΄κΈ° μ νβ
- μ΄μ ν μ€νΈλ₯Ό ν΅κ³Όνκ² λ§λ€μ΄μΌ νλ€.
- μ¬κΈ°μλ μ°μ XMPP λ©μμ§ λΈλ‘컀, XMPPλ₯Ό ν΅ν΄ ν΅μ ν μ μλ μ€ν 경맀, GUI ν μ€νΈ νλ μμν¬, λ€μ€ μ€λ λλ₯Ό μ§μνκ³ λΉλκΈ°μ μΈ μν€ν μ²μμ νμ©κ°λ₯ν ν μ€νΈ μ€λΉμΈλ°, μ΄ λ€ κ°μ§ κ΅¬μ± μμλ₯Ό μ°Ύμ보거λ μ§μ μμ±ν΄μΌ νλ€.
- μλνλ λΉλ, λ°°ν¬, ν μ€νΈ νλ‘μΈμ€μ ν¨κ» λ²μ κ΄λ¦¬νμ νλ‘μ νΈλ₯Ό μ§νν΄μΌ νλ€.
- μ΄λ κ² μ²μμΌλ‘ μμ±ν μ κ΅¬κ° ν μ€νΈλ₯Ό μμ±νλ€ λ³΄λ©΄ ν¨ν€μ§νμ λ°°ν¬ κ°μ ꡬ쑰μ μΈ μΈ‘λ©΄μ κ΄ν μμ¬ κ²°μ μ λ΄λ €μΌ ν κ²μ΄λ€.
π μ κ΅¬κ° ν μ€νΈβ
- μ κ΅¬κ° ν μ€νΈμμλ λμ μ ν리μΌμ΄μ λ΄λΆλ₯Ό λ€μ¬λ€λ³Ό μ μμΌλ©°, λ°λΌμ μ¬μ©μ μΈν°νμ΄μ€κ° λ°λκ±°λ λ‘κ·Έκ° λ¨λ κ²μ²λΌ μ΄λ€ κ°μμ μΈ ν¨κ³Όλ₯Ό κ°μ§ν λκΉμ§ κΈ°λ€λ €μΌλ§ νλ€.
π μμ μ€λΉβ
- μ¬κΈ°μ 첫 ν μ€νΈλ μ€μ λ‘ μ ꡬκ°μ λμμΌλ‘ νμ§ μλλ€. μ΄ ν μ€νΈμλ μ€μ 경맀 μλΉμ€κ° ν¬ν¨λΌ μμ§ μλ€. κ·Έ μ΄μ λ μ€μ 경맀 μλΉμ€λ₯Ό λ§λ ¨νκΈ° μ½μ§ μκΈ° λλ¬Έμ΄λ€.
- ν μ€νΈ μ£Όλ κ°λ° κΈ°μ μμ μ€μν λΆλΆμ ν μ€νΈ λμμ μ΄λκΉμ§ λ°λΌλ΄μΌ νκ³ , κ²°κ΅ μ΄λ»κ² λͺ¨λ λΆλΆμ ν μ€νΈν μ§ νλ¨νλ κ²μ΄λ€.
- μ°¨μ΄λ₯Ό μΌμ° νμ ν μλ‘ μ€ν΄μ κΈ°μ΄ν μ½λμμ μ€κ³ λΆμΌμΉλ₯Ό κ³ μΉ μκ°μ λμ΄λ κ²μ΄λ€.