統合コンポーネントに小さな変更を加え、自分の作業をカバーする単体テストを準備しました。すべての新規および既存の単体テストに合格しています。
データベースを復元したり、ファイアウォールルールを確認したりする必要があるため、コンポーネントをローカルで構成して実行するにはかなりの時間がかかります。
開発作業に関する完了の定義は不明確です。
単体テストは、work-on-my-machineのより良い代替品ですか?
テストチームに作業を渡す前に手動で変更を確認しないと、専門家ではないと見なされますか?
単体テストは、work-on-my-machineのより良い代替品ですか?
はい、それは不合理に優れています。環境の構成を保証するコンテナ化の種類がない限り、ローカルマシンで実行しても何も保証されません。そしてそれでも、手でそれを行うことは、他の人が同じことを手でやることを台無しにするように求めているだけです。単体テストでは、機能自体が迅速、確実、反復的に機能することを確認します。
テストチームに作業を渡す前に手動で変更を確認しないと、専門家ではないと見なされますか?
かもね。作業環境が異なれば、標準の操作手順や期待も異なります。ほとんどの環境では、ユニットテストのみを実行したことを気にしないか、ユニットテストのみを実行したことを知るのに十分ではないと思います。
個人的には、なんらかの理由で単体テストが禁止されているもの、または非常にデリケートな利害関係者によって取り上げられているもののみを手動で検証します。
いいえ。すべてが機能することを確認するには、統合またはUIテストが必要です。
理想的には、これらはあなた自身のマシンではなくある種のテスト環境で実行されます。
それが足りない場合は、おそらくセットアップを実行して手動でテストする価値があります。結局のところ、そのシステムにとって一度限りのことですよね?
仮想マシンを使用し、イメージを保存して再利用します。
ユニットテストは素晴らしいですが、コードのミスと同じくらいシステムを破壊する設定のような基本的なものをキャッチしません。
単体テストは、work-on-my-machineの優れた追加機能です。
常に統合/手動テストも実行する必要があります。単体テストのみを行うのは悪いことです。
「マシンでも機能する」コードを作成する良い方法は、テストサーバーとJenkinsのような継続的な統合を用意することです。そうすれば、コードは他のマシンでも実行されます。
それはコストの問題です。コードが6つの大きく異なる環境で動作する必要があり、ユニットテストはこれらすべての環境をチェックするように設定されているとします。また、これらの環境の1つをマシンにセットアップするのに6時間かかります。
その場合、セットアップ時にマシンのコードをチェックし(任意の環境で発生するバグを見つけるため)、ユニットテストを実行するのは当然のことです。 1つの環境をセットアップするのにかかる時間で、3回の単体テストと壊れたテストの修正を実行できる場合があります。
チームのポリシーによって異なります。
ローカルユーザーテストは、提供された単体テストとは異なるコードパスをカバーする場合があります。通常、カバレッジが多いほど優れています。 「マイマシン上で動作する」テストで見られる異常は、追加の単体テストまたはその他のテスト手順の必要性を指摘することがあります。
しかし、あなたのチームの方針は、それが他の誰かの仕事であるということかもしれません。または、小規模なチームでは、テスト環境以外でも機能することを確認するのが実際の仕事です。