public class TimesTable {
private int firstTimes;
private int lastTimes;
private int firstMultiplier;
private int lastMultiplier;
public int getFirstTimes() {
return firstTimes;
}
public void setFirstTimes(int firstTimes) {
this.firstTimes = firstTimes;
}
public int getLastTimes() {
return lastTimes;
}
public void setLastTimes(int lastTimes) {
this.lastTimes = lastTimes;
}
public int getFirstMultiplier() {
return firstMultiplier;
}
public void setFirstMultiplier(int firstMultiplier) {
this.firstMultiplier = firstMultiplier;
}
public int getLastMultiplier() {
return lastMultiplier;
}
public void setLastMultiplier(int lastMultiplier) {
this.lastMultiplier = lastMultiplier;
}
}
int 타입으로 firstTimes, lastTimes, firstMultiplier, lastMultiplier 변수를 만들었다.
모두 private 으로 해주고 get, set을 통해 접근할 수 있도록 해주었다.
firstTimes : 첫 단
lastTimes : 마지막 단
firstMultiplier : 첫 번째 곱할 수
lastMultiplier : 마지막 곱할 수
2단계 : TimesTableServiceTest.java 파일 만들기
service.java 를 만들기 전에 우선 serviceTest.java 파일을 JUnit으로 테스트하여 확인 후 service.java 파일을 만들어주는 것이 좋다.
public class TimesTableServiceTest {
@Test
public void testGenerateTimesHashMap() {
TimesTable table = new TimesTable();
table.setFirstTimes(2);
table.setLastTimes(9);
table.setFirstMultiplier(1);
table.setLastMultiplier(9);
String[][] a = generateTimesTable(
table.getFirstTimes(),
table.getLastTimes(),
table.getFirstMultiplier(),
table.getLastMultiplier());
System.out.println(a[2][1]);
}
// [2][1] -> 2 * 1 = 2 형태로 배열 반환
public String[][] generateTimesTable(int firstTimes, int lastTimes, int firstMultiplier, int lastMultiplier) {
String[][] timesTable = new String[lastTimes+1][];
for (int i = firstTimes; i <= lastTimes; i++) {
timesTable[i] = generateTimes(i, firstMultiplier, lastMultiplier);
}
return timesTable;
}
// 2 * 1 = 2, 2 * 2 = 4 형태의 문자열 배열 반환 -> 단
private String[] generateTimes(int times, int firstMultiplier, int lastMultiplier) {
String[] time = new String[lastMultiplier+1];
for (int i = firstMultiplier; i <= lastMultiplier; i++) {
time[i] = generateTimesString(times, i);
}
return time;
}
// 2 * 1 = 2 형태 문자열 반환
private String generateTimesString(int times, int multiplier) {
int result = times * multiplier;
String timesString = times + "*" + multiplier + "=" + result;
return timesString;
}
}
우선 파일을 만든 후 도메인 객체인 TimesTable을 인스턴스객체로 만들었다.
그 후 firstTimes, lastTimes, firstMultiplier, lastMultiplier에 각각 2, 9, 1, 9 라는 숫자를 직접 입력하여 테스트하였다.
자바스크립트 mvc 형태와 비슷하게 generateTimeString() 메서드로 우선 2*1=2 형태의 문자열을 우선 만들어주었다.
generateTimes() 메서드로 각 단을 만들어주었다.
time[2] -> 2단 의 형식이다.
generateTimesTable() 메서드로 테이블을 만들어주었다.
timesTable[2][1] -> 2*1=2 의 형식이다.
그리고 이를 testGenerateTimesHashMap() 메서드에서 테스트해주었다.
JUnit 테스트를 위해 @Test 애너테이션을 붙여주었다.
JUnit 테스트 화면
오류 없이 잘 실행된 것을 확인하였다.
3단계 : TimesTableControllerTest.java 파일 만들기
컨트롤러 역시 파일을 만들기 전 test 파일을 먼저 만들어서 확인한다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:servlet-context.xml") // 설정 파일 위치
public class TimesTableControllerTest {
@Autowired
TimesTableService timesTableService;
@Test
public void testCreate() {
TimesTable timesTable = new TimesTable();
timesTable.setFirstTimes(2);
timesTable.setLastTimes(9);
timesTable.setFirstMultiplier(1);
timesTable.setLastMultiplier(9);
String[][] table = timesTableService.generateTimesTable(
timesTable.getFirstTimes(),
timesTable.getLastTimes(),
timesTable.getFirstMultiplier(),
timesTable.getLastMultiplier());
System.out.println(table[2][1]);
Gson gson = new Gson();
String gsonString = gson.toJson(table);
System.out.println(gsonString);
}
}
@RunWith 애너테이션을 설정해준다.
JUnit 프레임워크의 테스트 실행방법을 확장해주는 애너테이션이다.
여기에 JUnit용 테스트 컨텍스트 프레임워크 확장 클래스인 SpringJUnit4ClassRunner.class 를 지정해주어 JUnit이 테스트 진행 중 사용할 애플리케이션 컨텍스트를 만들고 관리하는 작업을 진행하도록 해준다.
없으면 @Autowired로 지정된 TimesTableService 클래스를 찾지 못한다. ("this.timesTableService" is null)
@ContextConfiguration 애너테이션을 설정해준다.
이 애너테이션은 스프링 빈(Bean) 설정 파일의 위치를 지정해준다.
없으면 IllegalStateException 이 발생한다. (Failed to load ApplicationContext)
@Test 애너테이션을 설정하고 테스트를 진행한다.
serviceTest 에서와 마찬가지로 TimesTable의 인스턴스를 만들고 값을 지정해주었다.
이를 json형태로 만들어주기 위해 Gson을 사용하여 json형태의 문자열로 만들고 이를 출력해보았다.
JUnit 테스트 결과
JUnit 테스트 결과 문제없이 잘 실행되었다.
콘솔창 출력 결과
콘솔 창 출력 결과 table[2][1]의 형태로 출력한 값이 2 * 1 = 2 로 잘 출력되었고 json 형태로 출력한 값 역시 0단, 1단은 없으므로 null값이 되고 2 * 0 = 0의 값도 null, 2 * 1 = 2 부터 값으로 저장되어있는 것을 확인할 수 있다.