ホームページ >ウェブフロントエンド >jsチュートリアル >WET と DRY: 知っておくべきテスト原則

WET と DRY: 知っておくべきテスト原則

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 14:52:101033ブラウズ

WET vs. DRY: Testing Principles You Should Know

ソフトウェア開発では、明確で保守可能なテストを作成することは、コード自体を作成することと同じくらい重要です。この文脈でよく議論される 2 つの原則は、WET (すべてを 2 回書く) と DRY (同じことを繰り返さない) です。

これらの原則は、読みやすさ、保守性、効率性のバランスをとりながらテストを構築する方法の指針となります。それらの意味を詳しく調べ、例を調べて、それぞれのアプローチをいつ適用するかを理解しましょう。

? WET テストとは?

WET テストは、テスト ケースでの繰り返しが許可されるスタイルです。あまり理想的ではないと思われがちですが、このアプローチは、特に単純なテストの場合、単純さと明確さを優先できます。

WET テストの長所:

  • 簡潔さ: 特に初心者にとって、読みやすく理解しやすいです。
  • 分離: 各テストは独立して存在し、依存関係を回避します。
  • すぐに書ける: 小規模なプロジェクトや単純なシナリオに最適です。

WET テストの例:

describe('Login Tests - WET', () => {
  test('should allow user to login with valid credentials', async () => {
    await page.goto('https://example.com/login');
    await page.fill('input[name="username"]', 'user1');
    await page.fill('input[name="password"]', 'password1');
    await page.click('button[type="submit"]');
    await expect(page).toHaveURL('https://example.com/dashboard');
  });

  test('should show an error with invalid credentials', async () => {
    await page.goto('https://example.com/login');
    await page.fill('input[name="username"]', 'user1');
    await page.fill('input[name="password"]', 'wrongpassword');
    await page.click('button[type="submit"]');
    await expect(page).toHaveText('Invalid username or password');
  });
});

この例では、テスト全体でログイン手順が繰り返されます。

✨ DRY テストとは何ですか?

DRY テストは、共有ロジックを再利用可能な関数またはセットアップに抽象化することで、冗長性を最小限に抑えることに重点を置いています。このアプローチは、複雑なプロジェクトや大規模なプロジェクトに適しています。

DRY テストの長所:

  • 冗長性の削減: ロジックを集中化し、繰り返しを回避します。
  • メンテナンスの容易さ: 変更は 1 か所のみで行う必要があります。
  • よりクリーンなコード: セットアップではなく動作にテストを集中させます。

DRY テストの例:

describe('Login Tests - DRY', () => {
  const login = async (username, password) => {
    await page.goto('https://example.com/login');
    await page.fill('input[name="username"]', username);
    await page.fill('input[name="password"]', password);
    await page.click('button[type="submit"]');
  };

  test('should allow user to login with valid credentials', async () => {
    await login('user1', 'password1');
    await expect(page).toHaveURL('https://example.com/dashboard');
  });

  test('should show an error with invalid credentials', async () => {
    await login('user1', 'wrongpassword');
    await expect(page).toHaveText('Invalid username or password');
  });
});

ここでは、ログイン機能によって共有ステップが集中化され、テストがよりクリーンになり、保守が容易になります。

? WET と DRY をいつ使用するか?

個人的な経験から言えば、WET と DRY のどちらを選択するかは、プロジェクトの複雑さと要件によって異なります。

次の場合には WET を使用してください。

  • テストはシンプルで独立しています。
  • コードは頻繁に変更される可能性は低いです。
  • 抽象化よりも明確さを優先します。

次の場合には DRY を使用してください。

  • 複数のテストにわたってロジックを繰り返しました。
  • コードベースが大きいため、保守性が懸念されます。
  • 効率を高めるためにテストをリファクタリングする必要があります。

?重要なポイント
一般に DRY 原則が好まれますが、WET テストにも適した場所があります。明瞭さとメンテナンス性の両方を高めるバランスを追求します。小規模なプロジェクトや単純なシナリオの場合は、WET アプローチで十分な場合があります。ただし、大規模で複雑なテスト スイートでは、DRY を採用するとワークフローが大幅に改善されます。

最終的な目標は、どのようなアプローチであれ、明確で保守可能で効率的なテストを作成することです。

以上がWET と DRY: 知っておくべきテスト原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。