- HOME >
- Jamstack用語集 >
- Mock
Mock
モック
Mock を分かりやすく
Mock(モック)は、テスト中に実装コードの一部を模擬的に置き換えることを指します。この手法は、通常、外部のリソースやサービスへの依存関係を切り離すために使用されます。モックは、テストの精度を向上させるとともに、テストの実行速度を改善します。具体的には、ネットワーク通信やデータベースアクセスといった時間がかかる操作を、プログラムが予測可能な方法で返答する仮の操作に置き換えることができます。
Mock の歴史的変遷
モックは、ソフトウェアテストの世界で長い間使われてきた概念です。特にユニットテストの領域でその価値が認識されてきました。初期のモックは手作業で作成され、テスト対象のコードに密接に結びついていました。しかし、これは時間がかかる上に、新たなバグを生み出す可能性もありました。
近年では、自動化されたモッキングツールが多数登場しています。これらのツールは、モックの作成を自動化し、テストケースの準備を簡素化します。さらに、これらのツールはテストの信頼性を向上させ、テストのメンテナンスを容易にします。
Mock と Jamstack の関係
Jamstack は、JavaScript、API、Markup の頭文字を取ったもので、モダンなウェブ開発アーキテクチャの一つです。Jamstack では、事前に生成された静的なページをクライアントに配信することで、ウェブサイトのパフォーマンスを向上させています。
Mock は、Jamstack での開発において、特に API のテスト時に役立つ手法です。API のレスポンスを模擬することで、実際のAPIが利用できない状況でも開発やテストを進めることが可能となります。また、APIの予期せぬ変更やダウンタイムから開発プロセスを守ることもできます。
Mock を使うメリット
依存関係の排除
モックを使用すると、外部サービスやリソースへの依存を取り除くことができます。これにより、テストの信頼性が向上します。
テストの高速化
モックを使用することで、時間がかかる操作をスキップできます。これにより、テストの実行速度が大幅に向上します。
挙動の制御
モックを使用すると、テスト対象のコードの挙動を細かく制御することができます。これにより、エッジケースや異常系のテストが容易になります。
Mock を実装
Next.js と TypeScript を使用したモックの一例を以下に示します。ここでは、外部APIからデータを取得する関数 fetchData
をモック化しています。
import { NextPage } from 'next';
type Data = {
id: number;
name: string;
};
// モック対象の関数
async function fetchData(): Promise<Data> {
// 実際にはここで外部APIとの通信を行います
}
// モック関数
const mockFetchData = jest.fn();
jest.mock('./fetchData', () => ({
fetchData: mockFetchData,
}));
const Page: NextPage = () => {
const [data, setData] = React.useState<Data | null>(null);
React.useEffect(() => {
mockFetchData.mockResolvedValueOnce({
id: 1,
name: 'Test',
});
fetchData().then((data) => setData(data));
}, []);
return <div>{data ? data.name : 'Loading...'}</div>;
};
export default Page;
上記のコードでは、jest.mock
を使用して fetchData
関数をモック化しています。そして、mockResolvedValueOnce
を使用して、モック化した関数が返す値を設定しています。
Mock を学ぶ
以下に、モックを深く理解するための権威あるリソースをいくつかご紹介します。
リソース名 | URL |
---|---|
Jest 公式ドキュメンテーション: モック関数 | Jest の公式ドキュメンテーション内のモック関数についての詳細な説明です。 |
Martin Fowler: Mocks Aren't Stubs | Martin Fowler がモックとスタブの違いについて解説している記事です。 |
Google Testing Blog: Testing on the Toilet: Know Your Test Doubles | Google のテストエンジニアがテストダブル(モックを含む)について解説している記事です。 |