Tôi sử dụng Mock (hiện là unittest.mock trên py3.3 +) cho việc này:
from mock import patch
from PyQt4 import Qt
@patch.object(Qt.QMessageBox, 'aboutQt')
def testShowAboutQt(self, mock):
self.win.actionAboutQt.trigger()
self.assertTrue(mock.called)
Đối với trường hợp của bạn, nó có thể trông như thế này:
import mock
from mock import patch
def testClearWasCalled(self):
aw = aps.Request("nv1")
with patch.object(aw, 'Clear') as mock:
aw2 = aps.Request("nv2", aw)
mock.assert_called_with(42)
Mock hỗ trợ khá nhiều tính năng hữu ích, bao gồm các cách vá một đối tượng hoặc mô-đun, cũng như kiểm tra xem đúng thứ đã được gọi hay chưa, v.v.
Emptor caveat! (Người mua hãy cẩn thận!)
Nếu bạn nhập sai assert_called_with
(thành assert_called_once
hoặc assert_called_wiht
), thử nghiệm của bạn có thể vẫn chạy, vì Mock sẽ nghĩ đây là một chức năng bị chế nhạo và vui vẻ thực hiện, trừ khi bạn sử dụng autospec=true
. Để biết thêm thông tin, hãy đọc khẳng định_called_once: Đe doạ hoặc đe doạ .