본문 바로가기

IT Book Summary/TDD

(10)
32장. TDD 마스터 하기 단계가 얼마나 커야하나? ( 각 테스트가 다뤄야 할 범위는 얼마나 넓은가? / 리팩토링 하면서 얼마나 많은 중간단계를 거쳐야 하는가? ) 리팩토링 초기에는 작은 단계로 작업 많은 작은 리팩토링 작업후 몇단계 건너뛰는 시도. 자동화된 리팩토링 IDE 툴 활용. 테스트 할 필요가 없는 것은 무엇인가? '두려움이 지루함으로 변할때까지 테스트를 만들어라' 다음것들을 테스트 해야함. -> 조건문, 반복문, 연산자, 다형성. 내가 작성한 코드에 대해서만 테스트 할것. 불신한 이유가 없다면 다른사람이 만든 코드를 테스트하지마라. -> 다른 코드가 바뀐다면 테스트가 실패할것이기때문 좋은 테스트를 갖췄는지의 여부를 어떻게 알 수 있는가? 설계문제가 있을을 알려주는 테스트 속성. - 긴 셋업코드 - 셋업 중복 - 실행시간..
29장 - 31장 29장 xUnit 패턴 단언(assertion) 테스트가 잘 작동하는지 어떻게 검사할 것인가? -> 불리언 수식을 작성해서 프로그램이 자동으로 코드가 동작하는지에 대한 판단을 수행. 판단 결과가 불리언 값. 참 : 모든테스트 통과 / 거짓 : 예상치 못한 일 발생. 불리언 값은 컴퓨터에 의해 검증. 다양한 형태의 assert() 메서드를 호출하여 얻어냄. 단언은 구체적이어야 한다. 자바기반에서는 단언이 실패할 경우 출력될 정보를 단언에 추가해줄 필요가 있음. 픽스처 여러 테스트에서 공통으로 사용하는 객체들을 생성할때 어떻게 하면 좋을까? -> 각 테스트 코드에 있는 지역변수를 인스턴스 변수로 바꾸고 setUp() 메서드를 재정의하여 이 메서드에서 인스턴스 변수들을 초기화하도록 함. 테스트 코드에서도 중복..
3부 테스트 주도 개발의 패턴. 25장- 28장 25장. 테스트 주도 개발 패턴 테스트 한다는 것은 무엇을 뜻하는가? 테스트를 언제 해야 하는가? 테스트할 로직을 어떻게 고를 것인가? 테스트할 데이터를 어떻게 고를 것인가? 테스트 (명사) 작성한 소프트웨어를 어떻게 테스트할 것인가? - 자동화된 테스트를 만들어라 test : 평가하다. : 승인 또는 거부에 도달하는 과정. '테스트할 시간이 없다' 의 죽음의 나선. positive feedback loop 스트레스를 많이 받으면 테스트를 덜하게됨 - 테스트를 덜하면 에러가 많아짐 \ / 에러가 많아지면 스트레스를 더 받음 어떻게 이 악순환에서 벗어날 수 있을까? -> '테스트'를 '자동화된 테스트'로 치환하면 된다. 자동화된 테스트가 있다면 스트레스를 받기 시작할때 테스트부터 실행할 것이다. 그리고 테..
xUnit 21장 - 24장 21장. 셈하기 할일 목록 테스트메서드 호출하기 먼저 setUp 호출하기 나중에 tearDown 호출하기 테스트메서드가 실패하더라도 tearDown 호출하기 테스트 여러개 실행하기 수집한 결과를 출력하기 WasRun에 로그 문자열 남기기 테스트가 작동하도록 하려면 예외를 잡아야함. 기능을 구현하다 실수하면 예외가 보고되지 않으므로 실수를 알 방법이 없기 때문에. 일반적으로 테스트 구현 순서는 중요. 나에게 가르침을 주고 확신이 드는것을 선택한다. 우린 여러 테스트를 실행하고 그 결과를 보기를 원한다. "5개 테스트가 실행됨, 2개 실패, TestCaseTest.testFooBar-ZeroDivide Exception, MoneyTest.testNegarion-AssertionError" 그후 우리는 에러..
18장-20장 xUnit 18장. xUnit으로 가는 첫걸음 테스트 툴을 만드는 과정에서 만들어지는 테스트 툴 자체를 사용하는 것. - 스스로 자신의 뇌를 수술하는것과 비슷할것이다. - 자기참조 self-referential 프로그래밍에 대한 전산학 실습 우선 테스트 케이스를 만들고 테스트 메서드를 실행할 수 있어야 함. 테스트케이스를 작성하기 위해 사용할 프레임워크를 테스트하기 위한 테스트 케이스를 작성해야 한다. 할일목록 테스트메서드 호출하기 먼저 setUp 호출하기 나중에 tearDown 호출하기 테스트 메서드가 실패하더라도 tearDown 호출하기 여러개의 테스트 실행하기 수집된 결과를 출력하기 첫번째 원시테스트에는 테스트 메서드가 호출되면 true, 그렇지 않으면 false를 반환할 작은 프로그램이 필요하다. - 테스트..
13-17장 13장 진짜로 만들기 $5 + 10CHF = $10 (환율이 2:1 일 경우) $5 + $5 = $10 데이터 중복도 제거하자. public void testSimpleAddition() { Money five = Money.dollor(5); Expression sum = five.plus(five); Bank bank = new Bank(); Money reduced = bank.reduce(sum, "USD"); assertEquals(Money.dollar(10), reduced); } Bank Money reduce (Expression source, String to) { return Money.dollar(10); } 이전에는 상수를 변수로 치환하며 가짜구현을 진짜 구현으로 거꾸로 작업해나가..
10-12장 10장 흥미로운 시간 Money를 나타내기 위한 단 하나의 클래스만을 갖게 하기 위해 times() 구현을 동일하게 만들어야 하지만 명백한 방법이 없다. 일단 다시 Franc.times()가 Money를 반환하도록 고치고 테스트 해보자 Money 클래스를 추상클래스에서 바꾸고 times()도 바꿔서 다시 테스트. 에러 메세지다 toString() 작성하여 디버그 해보자. expected: study.tdd.demo.Franc@10f5e2f4 but was: study.tdd.demo.Money@1c0c55ca 문제는 equals 구현에 있다. 검사해야할 것은 클래스가 같은지가 아닌 currency가 같은지 여부이다. 보수적인 방법을 따르면 변경된 코드를 되돌려 다시 초록막대 상태로 돌아가야한다. equa..
7-10장 7장 사과와 오렌지 Franc 과 Dollar 비교하기 @Test public void testEquality() { assertTrue(new Dollar(5).equals(new Dollar(5))); assertFalse(new Dollar(5).equals(new Dollar(6))); assertTrue(new Franc(5).equals(new Franc(5))); assertFalse(new Franc(5).equals(new Franc(6))); assertFalse(new Franc(5).equals(new Dollar(5))); } 실패한다. 클래스의 금액과 클래스를 같이 체크해 주자. public boolean equals(Object object) { Money money = (Mo..