{"meta":{"title":"레이어를 추상화하기 위한 모의 개체 만들기","intro":"단위 테스트에 사용할 모의 개체를 만드는 데 공동 파일럿 채팅이(가) 도움이 될 수 있습니다.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/copilot","title":"GitHub Copilot"},{"href":"/ko/copilot/tutorials","title":"자습서"},{"href":"/ko/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot Chat 매뉴얼"},{"href":"/ko/copilot/tutorials/copilot-chat-cookbook/testing-code","title":"코드 테스트"},{"href":"/ko/copilot/tutorials/copilot-chat-cookbook/testing-code/create-mock-objects","title":"모의 개체 만들기"}],"documentType":"article"},"body":"# 레이어를 추상화하기 위한 모의 개체 만들기\n\n단위 테스트에 사용할 모의 개체를 만드는 데 공동 파일럿 채팅이(가) 도움이 될 수 있습니다.\n\n단위 테스트를 만들 때는 테스트가 격리되어 있고 외부 서비스에 의존하지 않도록 하는 것이 중요합니다. 이를 구현하는 한 가지 방법은 애플리케이션의 레이어를 추상화하는 모의 개체를 만드는 것입니다. 이러한 모의 개체를 만드는 데 필요한 코드를 생성하는 데 공동 파일럿 채팅이(가) 도움을 줄 수 있습니다.\n\n## 예제 시나리오\n\nTypeScript로 빌드되어 실행기 목록을 표시하는 웹사이트를 가정해 보세요. 데이터베이스에서 실행기를 가져오는 서비스와 이 서비스를 사용하는 서버 쪽 코드가 있다고 가정합니다. 서버 쪽 코드를 테스트하고 싶지만, 데이터베이스 호출은 수행하고 싶지 않습니다. 공동 파일럿 채팅에 서비스를 위한 모의 개체를 생성해 달라고 요청할 수 있습니다.\n\n```typescript id=mock-service\n// SvelteKit example at +page.server.ts\nimport service from './service';\n\nexport async function load({ params }) {\n  const runner = await service.getRunner(params.id);\n\n  return {\n    runner\n  };\n}\n```\n\n## 예시 프롬프트\n\n이 예제에서는 테스트에 [vitest](https://vitest.dev/)를 사용한다고 가정하지만, 다른 테스트 실행기에서도 작동합니다.\n\n```copilot copy prompt ref=mock-service\n/tests Create a unit test to ensure the service is called correctly. Mock the service object.\n```\n\nCopilot이(가) 모델로 사용할 기존 테스트가 있는 경우 `#file: path/to/test-file.js`을(를) 사용하여 파일 경로를 제공하고, 이 정보를 프롬프트에 포함할 수 있습니다.\n\n## 예제 응답\n\n> \\[!NOTE] 다음 응답이 예제입니다. 공동 파일럿 채팅 응답은 비결정적이므로 여기에 표시된 응답과 다른 응답을 얻을 수 있습니다.\n\n> \\[!NOTE] 다음 응답이 예제입니다. 공동 파일럿 채팅 응답은 비결정적이므로 여기에 표시된 응답과 다른 응답을 얻을 수 있습니다.\n\n```typescript\nimport { describe, it, expect, vi, beforeEach } from 'vitest';\nimport { load } from './+page.server.ts';\n\n// Mock the entire service module\nvi.mock('./service', () => ({\n  default: {\n    getRunner: vi.fn()\n  }\n}));\n\n// Import the mocked service\nimport service from './service';\n\ndescribe('load function', () => {\n  const mockRunner = {\n    id: '123',\n    name: 'Test Runner',\n    status: 'active'\n  };\n\n  beforeEach(() => {\n    // Reset mock before each test\n    vi.resetAllMocks();\n\n    // Setup default mock implementation\n    (service.getRunner as any).mockResolvedValue(mockRunner);\n  });\n\n  it('should fetch runner with correct id', async () => {\n    const params = { id: '123' };\n    const result = await load({ params });\n\n    expect(service.getRunner).toHaveBeenCalledWith('123');\n    expect(service.getRunner).toHaveBeenCalledTimes(1);\n    expect(result).toEqual({ runner: mockRunner });\n  });\n});\n```\n\n## Copilot은(는) 구현할 계획과 모의 개체가 포함된 코드 텍스트를 제공합니다.\n\n* [GitHub Copilot 채팅에 대한 프롬프트 엔지니어링](/ko/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [GitHub 부필로트 사용에 대한 모범 사례](/ko/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}