요즘 기업 코딩 테스트 대비하기 위해서 열심히 알고리즘 문제를 풀고 있다. 프로그래머스 문제만 푼다면 편하게 프로그래머스를 이용하면 되지만 책에 있는 문제도 풀어보고 인프런 강의 문제도 풀다보니 바로 테스트 할 수 있고 실행시간도 알 수 있는 테스트 함수가 필요하다고 생각했다. 문제 풀 때 함수 자동완성이랑 포맷팅 때문에 마침 VSCODE에서 풀고 깃허브에 올리고 있는데 마침 잘 됐다!
완전 럭키잖앙 ㅎ
test-helper.js
import assert from 'assert';
/**
* @param {string} testName - 테스트케이스 이름
* @param {Function} soluctionFunc - 테스트 진행할 함수
* @param {*} expectedResult - 함수 예상 결과
* @param {...*} args - 함수에 전달할 값
* @returns {void}
*/
export function runTest(testName, soluctionFunc, expectedResult, ...args) {
try {
const startTime = process.hrtime();
const result = soluctionFunc(...args);
const endTime = process.hrtime(startTime);
const duration = endTime[0] * 1000 + endTime[1] / 1000000;
if (typeof expectedResult === 'object') {
assert.deepStrictEqual(result, expectedResult);
} else {
assert.strictEqual(result, expectedResult);
}
console.log(`${testName}: Success! (${duration} ms)`);
} catch (error) {
console.error(`${testName}: ${error.message}`);
}
}
- 가져다 쓸 때 파라미터 순서 헷갈려서 JSDoc를 추가해줬다.
- Date 클래스 사용하는 것보다 나노초 단위로 반환하는 process.hrtime()이 더 정확해서 이걸 사용했다.
- duration 변수는 나노초 단위에서 밀리초 단위로 변환해서 저장했다.
- 문제에 필요한 파라미터 개수 확장성을 고려해서 ...args로 해줬다
- 결과값이 object 타입일 때 strictEqual() 을 사용하면 메모리에서 동일한 위치에 저장되어있는지 엄격하게 확인하기 때문에 동일한 구조, 동일한 요소인지 확인하기 위해 deepStrictEqual()로 확인했다.
runTest() 함수 사용 예시
runTest('convertDecimalToBinary #1', convertDecimalToBinary, 1011, 11);
runTest('convertDecimalToBinary #2', convertDecimalToBinary, 10111, 23);
runTest('convertDecimalToBinary #3', convertDecimalToBinary, 1111000, 120);
runTest('checkEqualSubsetSums #1', checkEqualSubsetSums, 'YES', 6, [1, 3, 5, 6, 7, 10]);
runTest('checkEqualSubsetSums #2', checkEqualSubsetSums, 'NO', 9, [3, 6, 13, 11, 7, 16, 34, 23, 12]);
runTest('checkEqualSubsetSums #3', checkEqualSubsetSums, 'YES', 10, [3, 6, 9, 13, 11, 7, 16, 34, 23, 12]);
야호~! 성공하면 이렇게 뜬다.
'일단기록' 카테고리의 다른 글
아직 1년 안 된 백엔드 개발자인 후기 (짧음) (0) | 2022.01.18 |
---|---|
취뽀 성공했다. (2) | 2021.04.01 |
백엔드 개발자(NodeJS)로 첫 면접 후기 (0) | 2021.03.30 |
개발하다가 막힐 때 (0) | 2020.11.30 |
AI역량검사(AI면접) 후기 (0) | 2020.11.17 |