페이지 트리
메타 데이터의 끝으로 건너뛰기
메타 데이터의 시작으로 이동

미리 설치할 것

  • java 8
  • maven 3.5 이상
  • git 2.x


프로젝트 Repository

https://github.com/slippStudy/slipp_tbd_todo


환경 설정 확인

아래와 같이  java, maven과 maven build를 확인합니다.

$ java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)


$ mvn --version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T04:39:06+09:00)
Maven home: /Users/mac/programs/maven/apache-maven-3.5.0
Java version: 1.8.0_92, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.6", arch: "x86_64", family: "mac"


$ git clone https://github.com/slippStudy/slipp_tbd_todo
$ cd slipp_tdb_todo
$ mvn test


...


Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.458 s
[INFO] Finished at: 2018-01-22T17:33:39+09:00
[INFO] Final Memory: 16M/180M
[INFO] ------------------------------------------------------------------------


SW 개발 업무 Cycle



구분

액션

상세 설명

비고

시작업무 선택이슈 리스트에서 업무를 선택. 이슈의 상태를 '진행중'으로 변경

체크 아웃리파지터리에서 프로젝트를 체크 아웃.$ git clone https://github.com/slippStudy/slipp_tbd_todo

코드 확인기존 테스트 케이스가 전부 성공하는 지 확인한다.

$ cd slipp_tbd_todo

$ mvn test


브랜치 생성작업할 새로운 브랜치를 생성한다.

$ git checkout -b "branch_name"

브랜치 이름은 "DDB-1_컴퍼넌트_Collector_구현"과 같이 이슈 아이디와 이슈 이름으로 한다.

구현테스트 케이스 이름 리스트 작성테스트 케이스의 이름 리스트를 작성.익숙해 지면 이 단계 생략 가능

코딩테스트 케이스와 본 코드를 작성한다.

테스트 케이스 성공 확인작성한 모든 테스트 케이스의 성공을 확인한다.




마무리전체 테스트 케이스 성공 확인기존과 새로 작성한 전체 테스트 케이스의 성공을 확인한다.

문서 작성작업한 내용에 대한 문서를 작성한다.

무엇, 왜, 어떻게를 중심으로 기술한다.

위키에.

수정된 코드를 비교하면서 하면 좋다.


코드 다듬기커밋 전에 코드 모양새를 다듭는다.수정된 코드를 비교하면서 하면 좋다.

커밋코드를 커밋한다.

$ git add .

$ git commit -m "commit message"

$ git push

메시지의 시작은 [DDB-1]과 같이 이슈 아이디로 시작한다.





머징pull request 생성github에서 pull request를 생성한다.작성한 문서의 링크를 명시

코드 리뷰

보통은 코드리뷰를 온라인으로 하고 커멘트를 단다.

본 스터디에서는 해당 브랜치를 체크아웃 하고 코드리뷰를 하면서 코드를 직접 수정한다.



머징 실행머징을 실행한다.




종료이슈 종료이슈의 상태를 '완료'로 변경





Git 최소 사용법


git 사용 Cyle

  • 체크 아웃, git checkout
  • 새 브랜치 만들기, git branch -b new_branch
  • 기존 파일 수정, 혹은 새 파일 추가
  • stage에 수정된 파일 추가, git add new_file
  • 커밋, git commit -m "commit message"
  • 푸시, git push



체크 아웃

프로젝트 초기 체크 아웃

$ git checkout https://github.com/slippStudy/slipp_tbd_todo 


프로젝트 업데이트

$ git pull



신규 브랜치 생성

$ git branch -b branch_name

 브랜치 이름은 다음과 같이 한다.

이슈아이디 + 이슈 간략 설명

예를 들어 이슈 아이디 ST-1, 이슈 'TodoManager.create 구현'의 경우

$ git branch -b ST-1_TodoManager_create_구현



$ git branch
* master

$ git checkout -b my_branch
Switched to a new branch 'my_branch'

$ git branch
* my_branch
  master


수정된 파일을 stage에 추가

커밋될 파일을  stage에 추가한다. 추가하지 않은 파일은 수정되었어도 커밋에 적용되지 않는다.


$ git add new_file
$ touch new_file


$ git status


On branch my_branch
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	new_file

nothing added to commit but untracked files present (use "git add" to track)


$ get add new_file
On branch my_branch
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   new_file


$ touch new_file2


$ git status
On branch my_branch
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   new_file

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	new_file2



커밋 하기

$ git commit -m "commit message"
$ git commit -m "tutorial commit"
[my_branch b16ea6a] tutorial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 new_file
(python3) macui-MacBook-Air-2:slipp_tbd_todo mac$ git status
On branch my_branch
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	new_file2

nothing added to commit but untracked files present (use "git add" to track)


푸시

$ git push



이슈 트래킹

다음 3개 툴 간에 서로 트래킹 되어야 한다.

이슈 관리 툴 ↔ 소스 관리툴 ↔ 문서 관리툴


이를 위해서 이슈 아이디를 기준으로 한다.


이슈 아이디가 "SlippTodo-1"라 할 때.


소스에 브랜치를 따고 커밋을 할 때 이슈 아이드를 사용.

  • 브랜치 이름 : "SlippTodo-1_TodoManager_구현"
  • 커밋 메시지 : "[SlippTodo-1] TodoMananger 구현"

그리고 pull request 생성시 메시지에 작성한 문서의 링크를 명시한다.


문서이름을 이슈 아이디로 시작

  • "2018/01/24 [SlippTodo-1] TodoManager 구현"


테스트 케이스 이름

테스트 케이스 클래스 파일 이름

대상 클래스의 이름 뒤에 Test를 붙인다.

  •  TodoManagerTest


테스트 케이스 메소드가 갯수가 많아지거나, 후에 편의를 위해 따로 분리할 필요가 있을 때는 알아 보기 쉬운 짧은 내용을 뒤에 덧 붙인다.

  • TodoManagerTest_SlippTodo1_bug_fix


테스트 케이스 메소드 이름

한글로 서술식으로 적은 테스크 케이스 이름을 사용한다.

  • public void 제목이_없을_때의_예외_던짐_확인 () { ... }



Spring과 Mock 객체

한 컴퍼넌트가 다른 컴퍼넌트를 사용할 경우, 테스트 케이스에서는 다른 컴퍼넌트를 Mock으로 생성해 사용한다.


 아래의 예는 TodoManager가 TodoRepository를 사용하는 경우

TodoManagerTest는 테스트 케이스 실행 시 MockTodoRepository을 TodoRepository대신 사용한다.

요 Mock을 가지고 테스트 케이스를 작성한다.

// TodoManager.java
@Component
public class TodoManager {

    @Autowired
    private TodoRepository todoRepository;


    public Todo create(Todo todo) {
        ...
    }

}


// TodoRepository.java
@Component
public class TodoRepository {

    public Todo save(Todo todo) { return null; }

}
// TodoManagerTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { AppConfig.class, TodoManagerTest.MockBeanConfig.class } )
public class TodoManagerTest {

    @Autowired
    private TodoManager todoManager;

    @Configurable
    public static class MockBeanConfig {
        @Bean
        @Primary
        public TodoRepository todoRepository() {
            return new MockTodoRepository();
        }
    }


    @Test
    public void 정상똥작_확인 () {
        ...
    }

    private static class MockTodoRepository extends TodoRepository {
        @Override
        public Todo save(Todo todo) {
            ....
        }
    }

}


요약하면

  • TodoManager와 TodoRepository 클래스에 @Component를 성정하여 에 Spring Bean임을 선언
  • mock 클래스를 사용하기 위한 설정
    • TestCase내에 @Configurable을 설정한 MockBeanConfig 클래스를 선언
    • MockBeanConfig에 public TodoRepository todoRepository() 메소드 선언
    • todoRepository메소드에 @Bean과 @Primary를 선언
  • TodoManagerTest 클래스
    • MockBeanConfig의 설정이 적용되도록 @ContextConfiguration(classes = { AppConfig.class, TodoManagerTest.MockBeanConfig.class } )을 설정
  • MockTodoRepository 클래스
    • TodoManagerTest 안에 TodoRepository를 상속한 MockTodoRepository 클래스를 static으로 선언
    • 필요한 메소드를 오버라이드 하여 선언


테스트 케이스의 리소스 파일 위치

각 테스트 케이스 메소드 별로 사용하는 별개의 파일을 따로 둔다.

그리고 그 위치는 테스트케이스 클래스 이름을 따서 TodoManagerTest_resources라고 폴더를 둔다.

test/
  java/
    net/slipp/todo_list
      TodoManagerTest.java
      TodoManagerTest_resources/
        some_file.txt


정말로 정말로 여러개의 테스트 케이스 클래스가 공통으로 사용되는 것만 test/java/resources 밑에 둔다.


문서 작성 방법

내가 작성한 코드를 pull request를 승낙받기 위해 작성한 코드를 설명하는 목적이다.

부디 승낙을 받기위한 비굴한 심정으로 작성한다.

무엇을 했고, 왜 했고, 어떻게 했고를 적는다.


너무 길어도 안되고, 너무 짧아도 안되고.

난장으로 적으면 당연히 안되고.

플리이이즈 하는 간절한 마음으로 적는다.






  • 레이블 없음

2 댓글

  1. 스터디는 참여 못하나.. 온라인에서나마 참여해볼께요~ ^^

    1. 온라인으로 공부한 내용의 위키의 댓글로 남겨라.

      그래야 실행력이 더 높아질 듯..