달력

7

« 2009/7 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

'2009/07/29'에 해당되는 글 2

  1. 2009.07.29 Guidelines for Better Unit Tests
  2. 2009.07.29 Roo Demo
2009. 7. 29. 15:04

Guidelines for Better Unit Tests TDD2009. 7. 29. 15:04

http://www.infoq.com/news/2009/07/Better-Unit-Tests


Jimmy Bogard “Getting value out of your unit tests” 라는 아티클에서 다음과 같은 3가지 규칙을 명시했다.

1. 테스트 이름은 사용자 입장에서 무엇/ 기술해야 한다. - 개발자가 테스트의 이름을 보면 의도된 행위가 무엇인지 이해할 있어야 한다.

2. 테스트도 코드이다. 테스트에도 사랑을 나눠주라. - 운영코드만 리팩토링해야 하는것이 아니다. 읽기 좋은 테스트는 유지보수하기 쉽고, 다른 사람이 이해하기 쉽다. 길고, 복잡한 테스트를 좋아하는 사람은 없다. 테스트에 30 라인이 넘는 셋업 코드가 있다면 해당 코드를 생성 메소드로 분리하라. 테스트 코드는 개발자를 당혹스럽게 한다. 운영코드에 메소드가 있으면 리팩토링하면서 테스트는 코드는 내버려두는가 ?

3. “Don’t settle on one fixture pattern/organizational style” – Sometimes the standard pattern of one class, one test fixture doesn’t work.


Lior Friedman 테스트의 첫번째 원칙은 내부 구조가 아니라 외부적인 행위를 테스트하는 이라고 한다. 달리 표현한다면 해당 클래스에 대한 현재 구조가 아니라 기대치를 테스트하라는 것이다.


Ravichandran Jv 아래와 같은 자신의 규칙을 언급했다.

1. 가능한 하나의 테스트에 하나의 Assert

2. test 메소드 내에 if/else 존재한다면 분기문을 다른 개별 테스트 메소드로 분리하라.

3. 테스트 대상 메소드에 if/else 존재한다면, 메소드도 리팩토링 대상이다.

4. 메소드의 이름은 어떤 테스트인지를 나타내야 한다. ex. TestMakeReservation TestMakeNoReservation 다르다.


NUnit 저자인 Charlie Poole도 하나의 테스트방 하나의 Assert를 언급했다. 


Bryan Cook 아래와 같은 고려할 만한 테스트 관련 목록을 만들었다:


DO: Name Fixtures consistently

DO: Mimic namespaces of Target Code

DO: Name Setup/TearDown methods consistently

CONSIDER: Separating your Tests from your Production Code

DO: Name Tests after Functionality

CONSIDER: Use "Cannot" Prefix for Expected Exceptions


그리고 이상과 같은 모든 이슈들은 Gerard Meszaros “xUnit Test Patterns: Refactoring Test Code”이라는 책에 집대성된다.

:
Posted by codetemplate
2009. 7. 29. 11:33

Roo Demo 프레임워크2009. 7. 29. 11:33

http://www.jroller.com/desmax/entry/roo

Roo Demo

1. 프로젝트 디렉토리 생성
msmac ~/tutorial/roo] mkdir pizza
msmac ~/tutorial/roo] cd pizza

2. roo 쉘 실행
msmac ~/tutorial/roo/pizza] roo
    ____  ____  ____  
   / __ \/ __ \/ __ \ 
  / /_/ / / / / / / / 
 / _, _/ /_/ / /_/ /  
/_/ |_|\____/\____/    1.0.0.RC1 [rev 198]


Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo>

3. 프로젝트 생성하기
roo> create project -topLevelPackage com.pizza
...

4. JPA 설치하기
roo> install jpa -provider HIBERNATE -database HYPERSONIC_PERSISTENT 
...

5. 도메인 클래스 생성하기
roo> new persistent class jpa -name ~.domain.Product
...

6. 도메인 클래스에 필드 추가하기
roo> add field string -fieldName name
...

roo> add field number -fieldName price -type java.lang.Double
...

roo> add field boolean -fieldName vegi
...

7. 도메인 클래스에 관계 추가하기
roo> new persistent class jpa -name ~.domain.PizzaOrder
...

roo> add field date jdk -fieldName orderDate -type java.util.Date
...

roo> add field set jpa -element ~.domain.Product -fieldName products
...

8. 컨트롤러와 뷰 추가하기
roo> new controller automatic -name ~.view.ProductController -formBackingObject ~.domain.Product
...

roo> new controller automatic -name ~.view.PizzaOrderController -formBackingObject ~.domain.PizzaOrder
...

9. 실행하기
roo> q
msmac ~/tutorial/roo/pizza] mvn tomcat:run

브라우저 주소창에 http://localhost:8080/pizza를 입력하고 테스트

10. 이클립스에서 프로젝트 불러오기
msmac ~/tutorial/roo/pizza] mvn eclipse:eclipse
eclipse에서 해당 프로젝트 import

Product.java를 열고 @RooToString 라인을 지우고, roo 쉘을 실행하면
msmac ~/tutorial/roo/pizza] roo
    ____  ____  ____  
   / __ \/ __ \/ __ \ 
  / /_/ / / / / / / / 
 / _, _/ /_/ / /_/ /  
/_/ |_|\____/\____/    1.0.0.RC1 [rev 198]


Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
Deleted SRC_MAIN_JAVA/com/pizza/domain/Product_Roo_ToString.aj

이처럼 JIT 방식의 code generation이 지원된다.
:
Posted by codetemplate