質問

コードの単体テストを改善しようと努めていますが、現在はリモート システムを扱うコードをたくさん書いています。SNMP、WMI、そのようなものです。ほとんどのクラスでは、オブジェクトをモックアップしてテストできますが、実際のシステムの単体テストにはどう対処すればよいでしょうか?たとえば、クラスがサーバーの Win32_LogicalDisk オブジェクトを取得した場合、どうやって単体テストを行うことができるでしょうか?

役に立ちましたか?

解決

「モックするのが難しい/不可能なものに対してテストするにはどうすればよいですか」という意味だと仮定すると、次のようになります。

「サーバーの Win32_LogicalDisk オブジェクトを取得する」クラスがあり、かつ他のことを行う (何らかの方法で「Win32_LogicalDisk」オブジェクトを消費する) 場合、このオブジェクトを消費するクラスの部分をテストしたいと仮定すると、次のようにします。使える 依存関係の注入 「Win32_LogicalDisk」オブジェクトをモックできるようにします。例えば:

class LogicalDiskConsumer(object):

    def __init__(self, arg1, arg2, LogicalDiskFactory)
        self.arg1=arg1
        self.arg2=arg2
        self.LogicalDisk=LogicalDiskFactory()

    def consumedisk(self):
        self.LogicalDisk.someaction()

次に、単体テスト コードで、「Win32_LogicalDisk」のモック オブジェクトを返す「LogicalDiskFactory」を渡します。

他のヒント

モック化が難しいものをテストする最も簡単な方法は、コード (テストする価値のあるロジック) を 1 か所に配置し、コードで使用する他のものを別のモジュールに配置する方法でコードをリファクタリングすることです。このモジュールは簡単にモックできるため、ビジネス ロジックに集中できます。

コア ライブラリ ルーチンを置き換え、おそらく適切な遅延の後に既知の値を返す一連の「テスト スタブ」を作成することもできます。

たとえば、最近、サードパーティ製品内で実行するコードを開発する必要がありました。課題は、私たちの「パートナー」がベース コードのコンパイルと統合を行うことです。許されなかった 見る あらゆる形式のコードです。私の戦略は、私がやったことを実行する非常にシンプルなエミュレータを構築することでした。 考え 彼らのコードは、エンジニアからの情報に基づいてそうでした。私たちは、各ビルドでエミュレーターのさまざまな部分を簡単に切り替えられる言語を使用したため、パートナーに新しいイテレーションをビルドしてもらう前に膨大な量のテストを行うことができました。

その特定の製品のソフトウェアの問題は、次に信頼性の高い製品よりも約 1 桁少ないため、私は同じ方法を再度使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top