최근에 테스트 코드 작성 문화를 손에 익을려고 노력하고 있었다.
하나의 테스트 코드에는 하나의 검사만 해야한다 등 통일하면 좋은 요소들이 있는 것 같아 이번 기회에 더 나은 테스트 코드를 작성하고자 공부를 하였다.
@Test
public void turnOnLoTempAlarmAtThreashold() throws Exception {
hw.setTemp(WAY_TOO_COLD);
controller.tic();
assertTrue(hw.heaterState());
assertTrue(hw.blowerState());
assertFalse(hw.coolerState());
assertFalse(hw.hiTempAlarm());
assertTrue(hw.loTempAlarm());
}
나도 평소에 이러한 테스트 코드를 작성한다. 하지만 이러한 테스트코드는 이러한 형태로 변화할 수 있다.@Test
public void turnOnLoTempAlarmAtThreshold() throws Exception {
wayTooCold();
assertEquals("HBchL", hw.getState());
}
...
public String getState() {
String state = "";
state += heater ? "H" : "h";
state += blower ? "B" : "b";
state += cooler ? "C" : "c";
state += hiTempAlarm ? "H" : "h";
state += loTempAlarm ? "L" : "l";
return state;
}
추가로 테스트 코드 환경은 자원이 제한적인 경우가 거의 드물어서 코드의 깨끗함(가독성)을 높이는 편을 추구하는 경향이 있다고 한다.
운영 환경일 경우 StringBuffer등 자바 운영환경에서 효율적인 구조를 사용해야할듯하다.
/**
* addMonth() 메서드를 테스트하는 장황한 코드
*/
public void testAddMonths() {
SerialDate d1 = SerialDate.createInstance(31, 5, 2004);
SerialDate d2 = SerialDate.addMonths(1, d1);
assertEquals(30, d2.getDayOfMonth());
assertEquals(6, d2.getMonth());
assertEquals(2004, d2.getYYYY());
SerialDate d3 = SerialDate.addMonths(2, d1);
assertEquals(31, d3.getDayOfMonth());
assertEquals(7, d3.getMonth());
assertEquals(2004, d3.getYYYY());
SerialDate d4 = SerialDate.addMonths(1, SerialDate.addMonths(1, d1));
assertEquals(30, d4.getDayOfMonth());
assertEquals(7, d4.getMonth());
assertEquals(2004, d4.getYYYY());
}
라는 테스트 코드를
SerialDate d1 = SerialDate.createInstance(31, 5, 2004);
SerialDate d3 = SerialDate.addMonths(2, d1);
assertEquals(31, d3.getDayOfMonth());
assertEquals(7, d3.getMonth());
assertEquals(2004, d3.getYYYY());
}
느낌으로 30일때 31일때 나눌 것 같긴하다.
5. F.I.R.S.T
Test-Driven-Development으로 '테스트 주도 개발'
코드가 내손을 벗어나기전 가장 빠르게 피드백을 받을 수 있다.
RED : 테스트 실패
GREEN : 테스트 성공
REFACTOR : 리팩토링
사실상 Flow를 따라가는 것과 비슷하다.
실제 코드의 유연성, 유지보수성, 재사용성을 강화하고 지속적으로 깨끗하게 관리하며
자신이 짠 코드에 대한 불안정성을 개선하자.
https://github.com/Yooii-Studios/Clean-Code/blob/master/Chapter%2009%20-%20%EB%8B%A8%EC%9C%84%20%ED%85%8C%EC%8A%A4%ED%8A%B8.md
http://clipsoft.co.kr/wp/blog/tddtest-driven-development-%EB%B0%A9%EB%B2%95%EB%A1%A0/
https://mangkyu.tistory.com/182