0

そのため、データベース クラスを呼び出す User クラスを単体テストしています。だから現時点で私はこれを持っています -

User.prototype.getUsername = function() {
    user = Database.loadUser(1);

    return user.username;
}

Database.prototype.loadUser = function(userId) {
    // Load user data from the database

    return {
        username: loadedUser.username,
        password: loadedUser.password,
        age: loadedUser.age
    };
}

そこで、ユーザー テストがデータベース レイヤーから分離されるように、データベースの loadUser() 関数をモックします。モックされた loadUser() 関数が、実際の loadUser 関数と同じプロパティを持つオブジェクトを返すようにします -

MockDatabase.loadUser = function(userId) 
    return {
        username: 'mockUsername',
        password: 'mockPassword',
        age: 1
    };
}

それで大丈夫です。数日後、データベースの loadUser 関数のプロパティを次のように変更するとします。

Database.prototype.loadUser = function(userId) {
    // Load user data from the database

    return {
        firstNanme: loadedUser.firstName,
        surname: loadedUser.surname
        password: loadedUser.password,
        age: loadedUser.age
    };
}

さて、私の User クラスはまだテスト中に MockDatabase.loadUser() 関数をモックとして使用しており、実際のプログラムを実行すると例外が発生しますが、実際の Database.loadUser 関数には 'ユーザー名のプロパティ。

では、この問題の解決策は何ですか?これは非常に一般的な状況だと思います。モックされた関数を実際の関数と常に同期させることも覚えておく必要がありますか? それは非常に非効率的でエラーが発生しやすい方法のように思えます..?

4

1 に答える 1

1

実際の loadUser 関数を変更する前に、テスト用の loadUser 関数を更新する必要があります。テスト駆動開発は、コードが最初に書かれたときだけでなく、その後の変更も対象です。

于 2013-07-06T12:22:10.680 に答える