지난 이야기:
svn 프로그램을 이용해서 SvnClient를 구현하기로 결정했다. 그리고, 이런 저런 코드를 구현하고 있었다. 그러던 중 SvnKit이라는 자바 모듈을 찾게 되었고, 이 모듈을 이용해서 SvnKit을 실험해 보기로 했다. 실험 결과 SvnKit을 사용하면 로컬에 파일을 따로 보관할 필요 없이 곧 바로 원격 리포지토리에 변경 내역을 커밋할 수 있음을 알게 되었다.
- 어린개발자1: 팀장님, SvnKit을 실험해 봤는데요, 원격 리포지토리에 바로 추가/수정/커밋이 되는데요.
- 나: 그래? 아, 그럼 LocalCodeUpdater는 필요 없군!
LocalCodeUpdater가 필요 없어졌다. 그래서 기존의 테스트 코드를 아래와 같이 변경했다.
public class BackupToolTest {
private BackupTool tool;
private DbCodeFinder mockDbCodeFinder;
private LocalCodeUpdater mockLocalCodeUpdater;
private SvnClient mockSvnClient;
private List<DbCode> dbCodeList;
@Before
public void setUp() {
tool = new BackupTool();
mockDbCodeFinder = mock(DbCodeFinder.class);
mockLocalCodeUpdater = mock(LocalCodeUpdater.class);
mockSvnClient = mock(MockSvnClient.class);
dbCodeList = createDbCodeList();
when(dbCodeFinder.findUpdatedDbCodeAfter(any(Date.class)).thenReturn(dbCodeList);
}
@Test
public void runBackup() {
tool.backup();
verify(mockDbCodeFinder).findUpdatedDbCodeAfter(any(Date.class));
verify(mockLocalCodeUpdater).update(dbCodeList);
verify(mockSvnClient).commit(dbCodeList);
}
LocalCodeUpdater가 필요 없어지면서, SvnClient의 commit() 메서드에 바로 DbCode 목록을 전달하도록 테스트 코드를 수정했다. 컴파일 에러를 잡아주기 위해 아래와 같이 SvnClient를 수정해주고,
public interface SvnClient {
public void commit(List<DbCode> dbCodeList);
}
이 후, 테스트를 통과시키면서 BackupTool에서 LocalCodeUpdater가 사용되는 부분을 제거하였다.
public class BackupTool {
private DbCodeFinder dbCodeFiner;
private LocalCodeUpdater localCodeUpdater;
private SvnClient svnClient;
public void backup() {
List<DbCode> dbCodeList =
dbCodeFinder.findUpdatedDbCodeAfter(getPreviousUpdatedTime());
localCodeUpdater.update(dbCodeList);
svnClient.commit(dbCodeList);
}
private Date getPreviousUpdatedTime() {
// 어제 날짜 6시 값 리턴
return ...;
}
public void setDbCodeFinder(DbCodeFinder dbCodeFinder) {
this.dbCodeFinder = dbCodeFinder;
}
public void setLocalCodeUpdater(LocalCodeUpdater localCodeUpdater) {
this.localCodeUpdater = localCodeUpdater;
}
public void setSvnClient(SvnClient svnClient) {
this.svnClient = svnClient;
}
}
이후, LocalCodeUpdater 인터페이스를 제거하였다.
이후 작업은 SvnKit을 이용한 SvnClient의 구현을 진행했다.
- 나: 이제 SvnKit을 이용해서 SvnClient 구현 클래스를 만들도록,
- 어린개발자1: 네!