7

適切な URL でページに到達したかどうかを確認する関数を作成しているとします。ページには「正規の」スタブがあります。たとえば、ページは stackoverflow.com/questions/123 でアクセスできますが、(SEO の理由から) stackoverflow.com/questions/123/how-do にリダイレクトすることをお勧めします。 -i-move-the-turtle-in-logo - 実際のリダイレクトは独自のメソッド (redirectPage($url) など) に安全に含まれていますが、それを呼び出す関数を適切にテストするにはどうすればよいでしょうか?

たとえば、次の関数を使用します。

function checkStub($questionId, $baseUrl, $stub) {
  canonicalStub = model->getStub($questionId);
  if ($stub != $canonicalStub) {
    redirectPage($baseUrl . $canonicalStub);
  }
}

checkStub() 関数の単体テストを行う場合、リダイレクトが邪魔になりませんか?

これは、特定の関数が大きくなりすぎて、単体テストの領域を離れて統合テストの世界に入るように見える、より大きな問題の一部です。私の頭の中では、ルーターとコントローラーがこの種の問題を抱えているとすぐに思います。それらをテストすると、それら自体の機能だけに限定されるのではなく、必然的にページの生成につながるからです。

単体テストで失敗するだけですか?

4

3 に答える 3

3

あなたは言う...

これは、特定の関数が大きくなりすぎて、単体テストの領域を離れて統合テストの世界に入るという、より大きな問題の一部です。

これが、単体テストが(1)難しく、(2)自重で崩れないコードにつながる理由だと思います。すべての依存関係を壊すことに細心の注意を払う必要があります。そうしないと、単体テスト == 統合テストになってしまいます。

あなたの例では、リダイレクタを依存関係として注入します。モック、ダブル、またはスパイを使用します。次に、@atk のレイアウトに従ってテストを実行します。時にはそれは価値がありません。多くの場合、より良いコードを書く必要があります。そして、IOC コンテナなしでは難しいことです。

于 2010-08-28T04:00:49.080 に答える
0

別のテストケースがあるようです。スタブがポジティブ テストとネガティブ テストの両方でスタブとして正しく識別されていることを確認する必要があります。また、リダイレクト先のページが正しいことを確認する必要があります。

または、質問を完全に誤解していますか?

于 2010-08-28T03:38:20.457 に答える