π 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()
λ©μλλ μ ν리μΌμ΄μ μμ 경맀 μνλ₯Ό λμ°° μ€ν¨λ‘ 보μ¬μ£Όμ§ μλλ€λ©΄ μμΈλ₯Ό λμ§ κ²μ΄λ€.