2016-10-05 56 views
1

嘲笑非測試方法我有一個測試類,就像下面這樣:需要在Django

@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): 
     ..... 

myapp.apps.mytask1.views,有掃描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" 

因此,只要img_file不存在,它將打印出File Not Present。當測試結果(使用模擬)發佈到Scan API時,由於模擬,此打印消息不會在控制檯上打印。但是當發佈到Scan API時,這個消息會被打印出來,因爲芹菜任務不會被嘲弄。我可以嘲笑hit_scan中的芹菜任務嗎?

所以,當我運行測試時,是否有辦法防止打印語句在控制檯中出現?

順便說一句,所有的測試案例通過。從這個角度來看沒有問題。我只想讓控制檯看起來更好,只有....而不是芹菜任務的打印語句也顯示出來。

編輯:解決了這個問題。這是我做的

@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

謝謝...我解決了這個問題。檢查了它 –