だから、私は少し前に書いた認証モジュールを持っています。今、私は自分のやり方のエラーを見、それのための単体テストを書いています。単体テストを書いている間、私は良い名前とテストする良い領域を思いつくのに苦労しています。例えば、私は次のようなものを持っています
- RequiresLogin_should_redirect_when_not_logged_in
- RequiresLogin_should_pass_through_when_logged_in
- Login_should_work_when_given_proper_credentials
個人的には、「適切」に見えても、少しthoughいと思います。また、テストをスキャンするだけでテストを区別するのに苦労しています(失敗したものを知るには、メソッド名を少なくとも2回読む必要があります)
だから、機能を純粋にテストするテストを書く代わりに、シナリオをカバーするテストのセットを書くかもしれないと思った。
たとえば、これは私が思いついたテストスタブです:
public class Authentication_Bill
{
public void Bill_has_no_account()
{ //assert username "bill" not in UserStore
}
public void Bill_attempts_to_post_comment_but_is_redirected_to_login()
{ //Calls RequiredLogin and should redirect to login page
}
public void Bill_creates_account()
{ //pretend the login page doubled as registration and he made an account. Add the account here
}
public void Bill_logs_in_with_new_account()
{ //Login("bill", "password"). Assert not redirected to login page
}
public void Bill_can_now_post_comment()
{ //Calls RequiredLogin, but should not kill request or redirect to login page
}
}
これはパターンを聞いたことがありますか?私は受け入れの物語などを見てきましたが、これは根本的に異なります。大きな違いは、テストを「強制」するシナリオを考えていることです。手動でテストする必要がある可能性のある相互作用を考え出すのではなく。また、これにより、1つのメソッドとクラスを正確にテストしない単体テストが奨励されることを知っています。これは大丈夫だと思います。また、これは少なくともいくつかのテストフレームワークで問題が発生することを認識しています。通常、テストは相互に独立しており、順序は重要ではありません(この場合はどこか)。
とにかく、これはお勧めのパターンですか?または、これは「ユニット」テストとしてではなく、APIの統合テストに最適ですか?これは単なる個人的なプロジェクトなので、うまくいくかもしれないし、うまくいかないかもしれません。
_test
追加した名前を使用し、コメントを使用して期待する結果を記録します。個人的なプロジェクトの場合は、快適に感じるスタイルを見つけ、それに固執します。