1

この仕様でコードの重複を削除するためにリファクタリングするにはどうすればよいですか?

describe 'TestPlugins'
    describe '.MovieScanner(document)'
        before_each
            MoviePage_loggedIn = fixture("movie_logged_in.html")                // Get logged-in movie page
            MoviePage_notloggedIn = fixture("movie_not_logged_in.html")     // Get non logged-in movie page
            scanner = new MovieScanner()                                                // Get movie scanner
        end

        it 'should scan logged-in movie page for movie data'
            doc = MoviePage_loggedIn            // Get document to scan

            // Unit Tests
            // ------------------------------------------------------------

            // Test movie scanner's functions
            scanner.getMovieTitle(doc).should.eql "The Jacket"
            scanner.getMovieYear(doc).should.eql "2005"

            // Test movie scanner's main scan function
            scannedData = scanner.scan(doc)
            scannedData.title.should.eql "The Jacket"
            scannedData.year.should.eql "2005"
        end

        it 'should scan non logged-in movie page for movie data'
            doc = MoviePage_notloggedIn     // Get document to scan

            // Unit Tests
            // ------------------------------------------------------------

            // Test movie scanner's functions
            scanner.getMovieTitle(doc).should.eql "The Jacket"
            scanner.getMovieYear(doc).should.eql "2005"

            // Test movie scanner's main scan function
            scannedData = scanner.scan(doc)
            scannedData.title.should.eql "The Jacket"
            scannedData.year.should.eql "2005"
        end
    end
end
4

1 に答える 1

0

BDDでは、アプリやクラスの動作を説明して、簡単に変更できるようにします。重複を削除すると動作が不明瞭になる場合は、重複を削除しないでください。コードは記述されたものの10倍多く読み取られ、BDDシナリオとユニットレベルの例ではIMEがさらに多く読み取られます。

とにかく重複を削除することにした場合は、読みやすいものに置き換えてください。私はJSpecに精通していませんが、次のようなものを期待しています

scannedData.shouldMatch "The Jacket", "2005"

タイトルと年に関連するすべての結果がチェックされます。

ログインしたかどうかに関係のない重複を削除するには:

コードをGivens(どのように到達したかは関係ありません)、Whens(実際に動作をテストしたいアプリを介したイベント)、Thens(探している結果)に分けます。Webページであるかウィンドウであるかではなく、システムの機能とユーザーがシステムで実行できることを説明しようとしています。問題ではありません。下位レベルの呼び出しを下位レベルに配置します。

次に、2つの異なる指定(ログイン済みまたは未ログイン)を設定し、残りの手順を他の手順で再利用できます。

于 2010-06-18T11:10:09.357 に答える