0

私はテストの世界から始めていますが、まだ理解できない疑問があります。それぞれをグーグルで検索しましたが、役立つものは見つかりませんでした。

次のオブジェクトがある場合、サーバー上の接続されたデバイスを管理する責任がある場合、どのテストを作成するのが理にかなっており、これらのテストをどのように作成する必要がありますか?

var devicesManager = {
    _devices: {},
    attachDevice: function(device) {
        _devices[device.id] = device;
    },
    detachDevice: function(device) {
        delete _devices[device.id];
    },
    sendCommand: function(device_id, command) {
        devices[device_id].performTask(command);
    }
}

これまでのところ、オブジェクトに必要な動作は次のとおりです。私の質問は次のとおりです。

  1. オブジェクトには、デバイスをアタッチおよびデタッチするための 2 つのメソッドがあります。私が読んだことから、テストで「プライベート」を使用するべきではないため、_devices オブジェクトをチェックして、メソッドが想定どおりに動作しているかどうかを確認できなかったと思います。何も返さないので、これらのメソッドをどのようにテストすればよいですか? または、それらをまったくテストしないでください。

  2. sendCommand メソッドも void を返すメソッドです。オブジェクトの状態をまったく変更しない void メソッドをテストする方法について、まだ混乱しています。デバイスメソッドをスパイして performTask が正しく呼び出されているかどうかを確認する場合、(ユニットではなく) 統合テストを行うことになりますか?

私がはっきりしていたことを願っています。

ありがとう

4

2 に答える 2

0

私が読んだことから、テストでは「プライベート」なものを使用しないでください。

私の意見では、そうではありません。プライベートなものを使用することは、「ホワイト ボックス テスト」の一形態であり、一部の状況 (組み込みシステムなど) では正当な手法です。ただし、テスト コード内のプライベートな部分は変更しないでください。変更すると、不注意で問題が発生する可能性があります。

また、理想的には、メイン コードに「testMode」機能を含めてはいけません。これは、実際のコードではなく、動作が変更されたコードをテストしているためです。代わりに、使用したいオブジェクトをテスト対象のオブジェクトと関数に渡します (この手法は、「依存性注入」と呼ばれることがよくあります)。これにより、モック オブジェクトを渡すことができます (以下を参照)。

オブジェクトの状態をまったく変更しない void メソッドをテストする方法について、まだ混乱しています。

これらには、モック オブジェクトを使用できます。

デバイスメソッドをスパイして performTask が正しく呼び出されているかどうかを確認する場合、(ユニットではなく) 統合テストを行うことになりますか?

実際のデバイス オブジェクトを使用する場合は、はい。モック オブジェクトを使用する場合は、いいえ。

于 2013-10-27T12:47:42.133 に答える
0

attachDevice および detachDevice メソッドをテストするために、デバイスが接続されているかどうかを通知する別のメソッドを追加できます。とにかく後で必要になるかもしれません:

deviceIsAttached:function(device){
    return _devices.hasOwnProperty(device.id);
}

その後、アタッチし、deviceIsAttached かどうかをテストして、デタッチできます。

sendCommand メソッドをテストするためのアイデアとして、コマンド (パラメーター) をより複雑なオブジェクトに変換して、テスト方法 (スコープ内の状態など) を知ることができます。次に、特別な種類の「デバッグ」または「テスト」コマンドを作成し、実行時にそれらを実行するオブジェクト/メソッドをテストできます。

于 2013-10-27T12:56:23.450 に答える