[解決済み] アレンジ-アサート-アクト-アサート "でよいのでしょうか?
質問
古典的なテストパターンである アレンジ-アクション-アサート に関して、私は頻繁にActの前にカウンターアサーションを追加していることに気づきました。 この方法で、私は通過するアサーションが本当にアクションの結果として通過していることを知ることができます。
私はこれをred-green-refactorのredに例えて考えています。テストの過程で赤いバーを見たときだけ、緑のバーは私が違いを生み出すコードを書いたことを意味することが分かります。 もし私が合格するテストを書いたとしたら のいずれかになります。 同様に、Arrange-Assert-Act-Assert に関して、私の最初のアサーションが失敗した場合、どの Act も最後の Assert を通過していることがわかります。
あなたのテストはこのパターンに従っていますか? その理由またはそうでない理由を教えてください。
更新 明確化:最初の主張は、最終的な主張と本質的に逆である。 アレンジが動作したというアサーションではなく、アクトがまだ動作していないというアサーションです。
どのように解決するのですか?
以下はその例です。
public void testEncompass() throws Exception {
Range range = new Range(0, 5);
assertFalse(range.includes(7));
range.encompass(7);
assertTrue(range.includes(7));
}
と書いたのは、もしかしたら
Range.includes()
を単純にtrueを返すように書いたのかもしれません。 私はそうしませんでしたが、そうするかもしれないと想像することはできます。 あるいは、他の多くの方法で間違った書き方をしたのかもしれません。 私は、TDDで実際に正しいことができたと期待しています。
includes()
が機能することを期待したいところですが、もしかしたらそうでないかもしれません。 ですから、最初のアサーションは、2番目のアサーションが本当に意味があるのかどうかを確認するためのサニティチェックなのです。
それ自体で読むと
assertTrue(range.includes(7));
は次のように言っています: "変更された範囲に 7" が含まれることを表明しています。 最初のアサーションの文脈で読むと、それは次のように言っています: "次のようにアサーションします。
encompass() を呼び出すこと
を呼び出すと7が含まれることを表明しています。 そして、encompassは私たちがテストしているユニットなので、私はそれが何らかの(小さな)価値があると思います。
私は自分自身の答えを受け入れています。他の多くの人が私の質問をセットアップのテストについてだと誤解しています。 私は、これはわずかに異なると思います。
関連
-
[解決済み] tornado + async defのunittestはどのように行うのですか?
-
[解決済み] 例外がスローされたことを確認するためにAssertを使用するにはどうすればよいですか?
-
[解決済み] 関数は return 文を1つだけ持つべきですか?
-
[解決済み] テスト駆動開発のデメリット?[クローズド]
-
[解決済み] 抽象クラスのテスト
-
[解決済み] GTestとCMakeを使った作業の始め方
-
[解決済み] 単体テスト?統合テスト? 回帰テスト? 受入テスト?
-
[解決済み] TDDと単体テストの比較 [終了しました]
-
[解決済み] 若手プログラマにテストを書かせるには?[クローズド]
-
[解決済み] パニックが発生したことを確認するRustのユニットテストはどのように書けばよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Assert.Fail()はバッドプラクティスとみなされるか?
-
[解決済み] MOCKITOとは何か、Junitとはどう違うか
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み】Arduinoのコードをユニットテストするにはどうしたらいいですか?
-
[解決済み] クロームの拡張機能をテストするには?
-
[解決済み] Junit: 統合テストと単体テストの分割
-
[解決済み] ユニットテストでは重複したコードが許容されるのか?
-
[解決済み] Kotlinで期待される例外をテストする
-
[解決済み] 例:無効なutf8文字列?
-
[解決済み] パニックが発生したことを確認するRustのユニットテストはどのように書けばよいですか?