テストとは

ソフトウェアを作成する際には、テストを通じて正しく動作することを確認できます。 テストは、おおまかに特定の環境でソフトウェアを実行するプロセスと定義できます。 意図したとおりに動作していることを確認するために、

テストが成功すれば、自信を持って新しいコード、機能、 依存関係をアップグレードしても、開発したソフトウェアが 期待どおりに動作し続けますテストはユーザーの安全を守るのにも 予期せぬシナリオや想定外の入力に対しても機能します。

たとえば、次のようなウェブの動作をテストすることをおすすめします。

  • ボタンがクリックされたときにウェブサイトの機能が正しく動作できるようにする。
  • 複雑な関数が正しい結果を生成することを確認する。
  • ユーザー ログインを必要とするアクションを完了する。
  • 不正な形式のデータが入力された場合に、フォームでエラーが適切に報告されることを確認する。
  • 複雑なウェブアプリが、ユーザーの負荷が非常に高くなっても機能し続けられるようにする またはオフラインになったりします。

自動テストと手動テスト

ソフトウェアのテストには主に 2 つの方法があります。自動テストと手動テストです。 説明します。

手動テストでは、ソフトウェアを人間が直接実行し、 ブラウザを開いて、期待どおりに動作することを確認します。手動 テストを簡単に作成または定義できる(たとえば、サイトを読み込めるか?あなたは 1 つ 1 つの実施に多大な費用がかかります あります。人間は非常に創造的であるため、ある種のテストを可能にすることができる 探索的テストと呼ばれますが、それでも失敗や 特に同じタスクを何度も行う場合に顕著です。

自動テストとは、テストを体系化して実行できるプロセスのことです。 ソフトウェアの意図する動作を確認するため、 セットアップや結果の確認など、繰り返しステップを人間に実行させる。 重要なのは、自動テストは構成後は頻繁に実行できることです。 これは依然として非常に広範な定義であり、自動化と さまざまな形や形をとることができます。このコースの大部分は 自動テストを実践としています。

手動テストには定着しつつある 自動テストの信頼性が低く、対象範囲が広範になった場合にも 簡単には作成できません

基本事項(例)

JavaScript や関連言語を作成するウェブ デベロッパーとして、 自動テストは たとえば毎日実行するスクリプトや またはブラウザに読み込んで、次のコマンドを実行します。

import { fibonacci } from "../src/math.js";

if (fibonacci(0) !== 0) {
  throw new Error("Invalid 0th fibonacci result");
}
const fib13 = fibonacci(13);
if (fib13 !== 233) {
  throw new Error("Invalid 13th fibonacci result, was=${fib13} wanted=233");
}

こちらは次のような分析情報を提供するシンプルな例です。

  • これは、いくつかのソフトウェア(フィボナッチ)を実行するため、テストです。 機能し、インフラストラクチャの 動作を意図したとおりに動作させるため、その結果を 確認します。動作が正しくない場合はエラーが発生し、 JavaScript は Error をスローすることで表現します。

  • ターミナルや 繰り返し実行できるため、これは自動テストです。 個別に操作する必要はありません次のページは テスト実行をご覧ください。

  • このテストではライブラリを使用しませんが、JavaScript です。 どこでも実行できます。それはまだテストです。データ アナリストが解決を助ける 本コースで後ほど説明するテストを含め、 いずれにせよエラーが発生するという基本原則に沿って 可能性があります。

ライブラリの実際のテスト

ほとんどのライブラリや組み込みテスト フレームワークには、2 つの主要なプリミティブが用意されています。 テストの記述を容易にする(アサーションと、独立したテストを定義する方法)。 これらについては、次のセクションのアサーションと 他のプリミティブ。大まかに言えば 重要な点として、目にしたり書き込んだテストのほとんどは この種のプリミティブを使用して

アサーションは、結果の確認と、次のような場合にエラーを発生させる処理を組み合わせたものです。 可能性があります。たとえば、前のテストをより簡潔に assert を導入することで:

import { fibonacci } from "../src/math.js";
import { assert } from "a-made-up-testing-library";

assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");

必要に応じて独立したテストを定義すると、このテストをさらに改善できます。 スイートにグループ化されます。次のスイートは、フィボナッチを個別にテストします。 Catalan 関数について説明します。

import { fibonacci, catalan } from "../src/math.js";
import { assert, test, suite } from "a-made-up-testing-library";

suite("math tests", () => {
  test("fibonacci function", () => {
    assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
    assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");
  });
  test("relationship between sequences", () => {
    const numberToCheck = 4;
    const fib = fibonacci(numberToCheck);
    const cat = catalan(numberToCheck);
    assert.isAbove(fib, cat);
  });
});

このソフトウェア テストの文脈では、名詞であるテストテストケースのことを指します。 対処可能な単一で独立したシナリオです。たとえば、「ビジネス オーナーと シーケンス示しています。

個別に名前を付けたテストは、特に次のタスクで役立ちます。

  • 時間の経過とともにテストがどのように成功または失敗するかを判断する。
  • バグやシナリオの名前をハイライト表示すると、そのバグが 解決します。
  • glob フィルタなどを使用して、一部のテストを他のテストから独立して実行する。

テストケースを考える一つの方法として、「3 つの A」という: 整理、実行、主張の 3 つがあります。各テストケースの中核となるものは次のとおりです。

  • いくつかの値または状態を配置する(これは単にハードコードされた入力データでもよい)。
  • メソッドの呼び出しなどのアクションを実行します。
  • 出力値または更新された状態をアサートします(assert を使用)。

テストの規模

前のセクションのコードサンプルでは、単体テストについて説明しています。これは、 通常は 1 つのファイルに集中してテストし、この方法では 単一の関数からの出力だけです。テストの複雑さは、テストに伴って増大する 複数のファイルやコンポーネント、あるいはさまざまな相互接続された (ネットワーク サービスやインフラストラクチャなど、ユーザーの制御下にない 動作)。そのため、多くの場合、テストタイプは スコープまたはスケールに応じて異なります。

テストの種類には、単体テストのほか、コンポーネント 視覚テスト統合テストがあります。名前に重複はない 厳密な定義があり、ニュース メディアによっては コードベースですから、その指針をガイドとして使用し、 役立ちますたとえば、システムのテスト対象のコンポーネントとは何でしょうか。対象 React デベロッパーにとって、これは文字通り「React コンポーネント」にマッピングされているかもしれませんが、 別の状況では、デベロッパーにとっては異なる意味を持ちます。

個々のテストの規模は、 「テストピラミッド」と見なすことができます。 その実行方法を説明します。

<ph type="x-smartling-placeholder">
</ph> テストピラミッドでは
    上部にエンドツーエンド(E2E)テスト、中央にインテグレーション テスト、
    単体テストです。
テストのピラミッド。

このアイデアは復活し、今では他にもさまざまな形が作られています。 有名なダイヤモンドや 作成しました。テスト作成の優先事項は、 学びました。ただし、共通の機能は、単体テストのような単純なテストが、 実行が速く、記述しやすい(そのためより多くの関数を持つ)傾向があります。 テスト範囲は限られているのに対し、エンドツーエンド テストのような複雑なテストは、 記述しにくいが、より広い範囲でテストできる。実際 多くの Google Cloud サービスの 「シェイプ」のテスト手動テストになる傾向があります。これは、一部のユーザー インタラクションが 自動テストに体系化するには複雑すぎます

これらのタイプは、自動化された テストをご覧ください。

理解度をチェックする

ほとんどのテスト ライブラリとフレームワークではどのようなプリミティブが提供されますか?

クラウド プロバイダを使用するランナー サービス。
一部のブラウザベースのランナーではテストをアウトソーシングできますが、 テスト ライブラリの通常の機能ではありません。
一致しない場合に例外を発生させるアサーション。
エラーをスローしてテストに失敗することもできますが、assert() チェックしやすくなるため、そのバリエーションが含まれる傾向がある 作成します。
テストをテスト ピラミッドに分類する方法。
これを行う標準的な方法はありません。先頭に「 テスト名を指定したり、別のファイルに保存したりしますが、 ほとんどのテスト フレームワークには、分類は組み込まれていません。
機能別に独立したテストを定義する機能。
test() メソッドは、ほぼすべてのテストに含まれています 作成しますテストコードはトップレベルでは実行されないため、このことは重要です。 これにより、テストランナーは各テストケースを 独立したユニットです