我有一个测试类,如下所示:
@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
中,有一个Scan 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()
方法,然后这条消息被打印,因为芹菜任务没有被嘲笑。我可以在hit_scan
??
那么,当我运行测试时,有没有办法阻止print语句出现在控制台中?
顺便说一下,所有测试用例都通过了。从这个角度来看没有问题。我只是希望控制台看起来更好,仅使用....
而不是芹菜任务的打印语句也显示出来。
修改:解决了问题。这就是我做的事情
@mock.patch('myapp.apps.mytask1.views.image_processing.apply_async')
def hit_scan(self, mock_obj, """some args"""):
答案 0 :(得分:0)
这与测试之外的方法无关; Python没有这样的区别。但是你的模拟语法是错误的:你需要通过Python模块路径而不是文件路径引用你想要模拟的东西。
@mock.patch('path.something.file.apply_async')