2016-01-04 9 views
5

私はユニットテストで使用されるいくつかのコードを持っています。しかし、ロードするライブラリには、ユニットテストによってそのデータが擬似的に取り出されるため、実際にはノーズテストに必要とされないデータが必要です。ライブラリのファイル読み込みを保護して、鼻検査の場合に呼び出されないようにしたいと思います。コードが鼻検査から実行されているかどうかを確認するにはどうすればよいですか?

これを行う簡単な方法はありますか?

おそらくsys.modulesや初期コマンドラインで何かできますが、もしあればもっとエレガントなものが好きです。

+0

*ノーズテスト*とは何ですか? – wallyk

+0

これは特定の単体テストフレームワークです。 –

+0

いくつかのファイルが存在するかどうかをチェックし、そうでない場合は、コードを 'nose-test'としてフラグを立て、そのようなファイルのロードを防ぎます。 – tglaria

答えて

2

正しいアプローチは、すべてのコードを副作用でモックすることです(私はあなたが望んでいないものと仮定します)。 tested_moduleのmy_module考える

def do_something_and_destroy_world(): 
    destroy_world() 
    return None 

サンプルテストファイルは次のとおりです。

import mock 
import unittest 

import my_module 

class MyTest(unittest.TestCase): 
    def testSomethingUgly(self): 
     with mock.patch('my_module.destroy_world', return_value=None): 
      result = do_something_and_destroy_world() 
      self.assertIsNone(result) 

テストが実行されると、アサーションが正しいだろう、とdestroy_worldが呼ばれることはない - その代わりに買ってあげます戻り値が固定された空のモックに置き換えられました。

+0

ニース。面倒なコードは実際にはメソッドではないので、私は現在のコードでうまく動作するとは思わない。インポートの周りでmock.patchを実行できない場合でも、それは面倒なことになります... これを行う正しい方法が正当なコードであることを知ることは良いことです... –

6

コメントで述べたように、このコードの構造が混乱し、テストのポイントの一部は、私はリファクタリングするとき、私は物事を壊さないことを確認することです...

ので、用今、誰かが私により良い答えを与えない限り、私は使用しています:

if 'nose' not in sys.modules.keys(): 
    <read the data> 
関連する問題