2011-08-15 20 views
1

私は同僚との意見の不一致を抱えています。私は両側のコミュニティの考えを紹介したいと思います(または、さらに良い第3の選択肢)。テスト戦略:応答の「機能」をアサートするか、完全な応答を主張しますか?

基本的には、友だちリストを返すJSON APIがあります。結果は次のようになります。

[{"name":"Bob", "uid":12345, "level":4}, {"name":"George", "uid":23456, "level":6}] 

応答に影響する通常の「相互友人」の要件があります。

意見の相違は、その上には優れている基本的には、応答の "機能" を主張

  • テストです:リテラルの応答に主張

    def test_results_are_sorted_by_name(): 
        .. <setup 2 friends> .. 
    
        response = controller.getFriendsList() 
        assertLessThan(response[0].name, response[1].name) 
    
    def test_blocked_users_are_not_returned(): 
        .. <setup some friends and block one, storing the id in blocked_uid> .. 
    
        response = controller.getFriendsList() 
        for friend in response: 
         assertNotEqual(friend.uid, blocked_uid) 
    
  • テスト

    def test_results_are_sorted_by_name(): 
        .. <setup 2 friends> .. 
    
        response = controller.getFriendsList() 
        expectedResponse = {...} 
        assertEqual(response, expectedResponse) 
    
    def test_blocked_users_are_not_returned(): 
        .. <setup some friends and block one, storing the id in blocked_uid> .. 
    
        response = controller.getFriendsList() 
        expectedResponse = {...} 
        assertEqual(response, expectedResponse) 
    

どちらがいいですか、なぜですか?

他にも2つのオプションがありますか?ここ

+0

「どちらが良いですか」という質問は、「質問しない」カテゴリの質問に該当します。http://stackoverflow.com/faq#dontask – Kev

答えて

2

ピュア意見、しかし:

テストリテラルは悪い行動を奨励 - リテラルのテストはとても壊れやすいので、多くの場合、人々はリテラルを更新することにより、障害をテストするために対応することを学ぶことを破ります。彼らがそれを壊したとしても、それは正しいことを確信し、リテラルを更新し、意図せずにテストでバグを固め、修正されないことを保証するかもしれません。

機能テストは適切な方法です。間違った方法があります - あなたは簡単に正しいと思われる機能テストを書くことができますが、コードが壊れても機能しますが、その最適な解決策は機能テストとの統合テストを使用して、サービスは実際にあなたが期待していることをします。

1

リテラルレスポンスではなく、機能に基づいてテストする必要があります。

原則として、これにより、人々はすでにテストを書いたものを壊さないように、フォーマット(フィールドの追加など)を変更することができます。彼らがこれをするとき、あなたのテストは壊れないでしょう、それは彼らがすべきことです。 (新しいフィールドを追加するのが悪い場合は、そのためのテストを書いてください)

実際には、リテラルテキストテストは新しい文字列を貼り付けるだけで修正されることがあります。実際の問題は誰にも貼られません彼らに十分な考えを与えました。

テストに合格した後にデータの受信者と反応しない何らかの方法でレスポンスが変更されないようにするには、いくつかの基本レベルの統合テストを含めます。

関連する問題