2016-10-05 3 views
1

に非試験方法を模擬する必要があります。myapp.apps.mytask1.views私はちょうど下記のいずれかのようテストクラスを持っているジャンゴ

@mock.patch('myapp.apps.mytask1.views.image_processing.apply_async') 
class SortAPITestCase(APITestCase): 


    def hit_scan("""some args"""): 
     scan_uri = 'some url' 
     data = 'some data' 
     resp = self.client.post(scan_uri, data=data) 
     id = resp.data['id'] 
     self.assertEqual(resp.status_code, 201) 
     return data, id 

    def setUp(self): 
     super(SortAPITestCase, self).setUp() 
     self.scan_data, self.id = self.hit_scan() 

    def test_1(self, mock_obj): 
     ..... 

    def test_2(self, mock_obj): 
     ..... 

、スキャンAPI、セロリタスクなどを呼び出すpost方法がありあり:

def post("""some args"""): 
    """ here there is a celery task that gets called""" 
    image_processing.apply_async(
     args=[img_data], queue='image', countdown=10 
    ) 

セロリのタスクは、それが多少

@shared_task 
def image_processing(img_data): 
    if os.isfile(img_file): 
     print "File Not Present" 
0123以下のように呼ばれるメッセージを出力

したがって、img_fileが存在しない場合は、File Not Presentが出力されます。テスト機能(模擬あり)がScan APIに送信されると、この印刷メッセージは模擬のためにコンソールに表示されません。しかし、hit_scan()メソッドは、スキャンAPIに投稿すると、このメッセージはセロリのタスクが嘲笑されていないので印刷されます。セロリの仕事を模擬することはできますhit_scan ??

これで、テストを実行するときにコンソールでprint文が表示されないようにする方法はありますか?

ところで、すべてのテストケースが合格です。その観点からは問題はありません。私はちょうど....セロリの仕事からの印刷ステートメントの代わりにだけ表示されてコンソールを見栄えたい。

:問題を解決しました。ここに私が行ったことがあります

@mock.patch('myapp.apps.mytask1.views.image_processing.apply_async') 
def hit_scan(self, mock_obj, """some args"""): 

答えて

0

これはテストの外にある方法とは関係ありません。 Pythonはそのような区別をしません。しかし、嘲笑の構文は間違っています:ファイルパスではなく、Pythonモジュールパス経由でモックするものを参照する必要があります。

@mock.patch('path.something.file.apply_async') 
+0

私は実際の 'mock.patch()'で質問を編集しました。 'hit_scan()'が 'test_'関数で呼び出されるときは、セロリタスクにその文を表示しません。私はそれを確認しました.. –

+0

あなたが言及したことは問題ではありません。あなたは私の編集された質問を見ていたと思います。ありがとう –

+0

ありがとう...私は問題を解決しました。編集をチェック –

関連する問題