목차
Mocking이란?
Mocking은 테스트 중에 필요한 객체를 가짜로 만들어 실제 객체처럼 동작하도록 하는 것입니다. 실제 객체를 사용하지 않고 Mock 객체를 사용하여 의존성을 분리하고, 테스트의 안정성을 높일 수 있습니다.
스텁이란?
스텁은 특정 함수의 호출에 대한 원하는 결과를 반환하는 것입니다. 특정 상황에서 함수의 반환값 또는 동작을 정의할 때 사용됩니다. 스텁은 테스트에 필요한 가짜 동작을 정의하여 테스트를 더욱 쉽고 정확하게 만들어 줍니다.
자바스크립트 TDD에서의 Mocking
자바스크립트 TDD에서 Mocking을 활용하면 테스트 중에 외부 환경에 의존하지 않고 코드를 테스트할 수 있습니다. 이를 통해 테스트의 안정성을 높일 수 있고, 테스트를 더욱 쉽게 작성할 수도 있습니다.
Jest를 이용한 Mocking
Jest는 자바스크립트용 유닛 테스트 프레임워크로, Mocking을 쉽게 구현할 수 있는 기능을 제공합니다. 아래는 Jest를 활용한 Mocking의 예시입니다.
// UserService.js
class UserService {
async getUser(userId) {
// 실제로 외부 API를 호출하여 사용자 정보를 가져옴
return await fetch(`https://api.example.com/users/${userId}`);
}
}
// UserService.test.js
const fetch = require("node-fetch");
const UserService = require("./UserService");
jest.mock("node-fetch");
test("getUser 함수가 올바르게 동작하는지 테스트", async () => {
const mockResponse = {
id: 123,
name: "John Doe",
email: "john.doe@example.com",
};
fetch.mockResolvedValue({
json: jest.fn().mockResolvedValue(mockResponse),
});
const userService = new UserService();
const user = await userService.getUser(123);
expect(user).toEqual(mockResponse);
});
위의 예시에서는 Node.js의 node-fetch
모듈을 Mocking하여 실제 API 호출 없이 테스트를 진행하고 있습니다. fetch.mockResolvedValue()
를 사용하여 원하는 응답을 설정할 수 있습니다. 이를 통해 외부 의존성 없이 getUser
함수를 테스트할 수 있습니다.
자바스크립트 TDD에서의 스텁
자바스크립트 TDD에서 스텁을 활용하면 원하는 동작을 가진 가짜 함수를 사용하여 코드를 테스트할 수 있습니다. 특정 상황에서 함수의 동작을 정의하여 테스트를 더욱 쉽고 정확하게 만들어 줍니다.
Sinon을 이용한 스텁
Sinon은 자바스크립트용 mocking 라이브러리로, 스텁을 쉽게 구현할 수 있습니다. 아래는 Sinon을 활용한 스텁의 예시입니다.
// MathUtils.js
class MathUtils {
add(a, b) {
// 두 수를 더한 결과 반환
return a + b;
}
}
// MathUtils.test.js
const sinon = require("sinon");
const MathUtils = require("./MathUtils");
test("add 함수가 올바르게 동작하는지 테스트", () => {
const mathUtils = new MathUtils();
const stub = sinon.stub(mathUtils, "add");
stub.withArgs(2, 3).returns(5);
const result = mathUtils.add(2, 3);
expect(result).toBe(5);
stub.restore();
});
위의 예시에서는 Sinon의 stub
을 사용하여 add
함수의 동작을 원하는대로 정의하고 있습니다. stub.withArgs()
를 사용하여 특정 인수에 대한 반환값을 설정할 수 있으며, stub.restore()
를 사용하여 원래 함수로 복구할 수 있습니다.
결론
자바스크립트 TDD에서 Mocking과 스텁은 테스트의 안정성과 정확성을 높이고, 외부 의존성을 제거하여 테스트의 효율성을 높이는데 도움을 줍니다. Jest와 Sinon과 같은 라이브러리를 활용하여 Mocking과 스텁을 구현할 수 있으므로, 이를 적절히 활용하여 효과적인 TDD를 진행해 보세요.