2012-03-15 11 views
0

私はDjangoアプリケーション用のテストをいくつか書き始めました。Djangoは他のページ/動作に依存してテストします

私は登録ページとログインしたユーザーのみのページがあります。 私の最初の計画では、以前の方法を持っていたページをテストするにはログインレジスタと後者の方法の使用を実行します。

def test_register_page(self): 
    //send request to register page and check user has been registered correctly 
def test_restricted_page(self): 
    c = Client(); 
    c.login("someUser","pass"); 
    c.post("/someRestrictedPage/"); 
    //Test response 

しかし、これは今、私のテストの一方が他方に依存していることを意味します。
私は、setUp()でregisterを呼び出していますが、これは依然として制限されたページテストがレジスタページの動作に依存していることを示しています。

セットアップで新しいユーザーを手動で作成しようとしましたが、これはシステムによって作成されたユーザーをテストしていないため、好きではありません。

このような状況をテストするための通常のパターンは何ですか?

答えて

1

1つのテストケースでさまざまな機能を混在させようとしています。すっきりとしたデザインは、一つのテストケースにユーザ登録用

  • とビューの
  • 1つを有するであろう。

これらは互いに依存しているため、それらの間に多くの依存関係が導入されます。テストが失敗した場合、エラーはさらにデバッグされにくくなります。登録テストの成功は、特定のページにログインできなくても、ユーザーインスタンスの正しい作成(ユーザーの必要な属性などの確認)によって決定される必要があります。したがって、ビューのテストケースに対して「正しい」ユーザーインスタンスを設定する必要があります。これは、必要以上に複雑に思えるかもしれませんが、将来のメンテナンスがずっと楽になります。何をしようとする は全体システムをテストしていますが、その前に、あなたが機能単位であなたのシステムを分割し、ユニットはこのユニットのをテストすればいい統合テスト、のようなより多くのものです! 単一のテストが小さく、明確に定義されているほどメンテナンスとデバッグが容易になります。

+1

申し訳ありませんが、わからない場合は。これらは、ログインしたユーザーへのアクセスを制限するテストと、ユーザーの登録をテストする2つの別々の単体テストであると想定されています。 setup()のようなサウンドは、テストのために手動でユーザを作成する必要があります。ご協力いただきありがとうございます。 – Jim

+0

@Jim:このトピックで面白い人は、Djangoの単体テストを扱う素敵な話題があります。特にテスト用にオブジェクトを作成するための快適な方法をいくつか示しています。https://www.youtube.com/watch?v=ickNQcNXiS4&context = C44039cbADvjVQa1PpcFPQunG_ULh73WnDAl7g7Y8JDYIDmeEZjYQ = –

関連する問題