我試圖學習Python和嘲諷基礎設施的Python在同一時間(由於要求在我的工作地點)。我還應該提及,我對C++或任何其他語言的嘲笑功能也不熟悉。newbiee查詢:蟒蛇嘲弄
到目前爲止,從我所瞭解的是,通過嘲笑,我可以鍛鍊使操作系統的應用程序代碼。網絡等相關的調用,而沒有實際調用這些操作。
比方說,我的應用程序,實現爲network.py
#!/usr/bin/env python
import sys
import socket
class NetworkService(object):
def sock_create(self):
try:
s = socket.socket()
s.close()
print "closed socket"
except Exception, err:
print "error creating socket"
sys.exit(1)
的事情,我想實現我的單元測試是:
- 確保兩個正常和失敗路徑經過測試。
在這種情況下,要實現,這個我想拿出與行使sock_create方法,如下樣本單元測試用例:
#!/usr/bin/env python
import unittest
import mock
from network import NetworkService
class NetworkServiceTest(unittest.TestCase):
@mock.patch('network.socket')
def test_01_sock_create(self, mock_sock):
reference = NetworkService()
mock_sock.return_value = False
# NetworkService::sock_create::s.close() should NOT get called
reference.sock_create()
self.assertFalse(mock_sock.close.called, "Failed to not call close")
mock_sock.socket.return_value = True
# NetworkService::sock_create::s.close() should get called
reference.sock_create()
# how to test this ???
#mock_sock.close.assert_called_with("")
if __name__ == '__main__':
unittest.main()
正如你可以在上面看到,該最後'斷言'聲明目前已被註釋掉;我不確定,如何檢查?下面給我的錯誤:
#!/usr/bin/env python
import unittest
import mock
from network import NetworkService
class NetworkServiceTest(unittest.TestCase):
@mock.patch('network.socket')
def test_01_sock_create(self, mock_sock):
reference = NetworkService()
mock_sock.return_value = False
reference.sock_create()
self.assertFalse(mock_sock.close.called, "Failed to not call close")
mock_sock.socket.return_value = True
reference.sock_create()
self.assertTrue(mock_sock.close.called, "Should have called s.close")
if __name__ == '__main__':
unittest.main()
和錯誤:
$ python tester.py
F
======================================================================
FAIL: test_01_sock_create (__main__.NetworkServiceTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/mock/mock.py", line 1305, in patched
return func(*args, **keywargs)
File "tester.py", line 17, in test_01_sock_create
self.assertTrue(mock_sock.close.called, "Should have called s.close")
AssertionError: Should have called s.close
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (failures=1)
closed socket
error creating socket
注意,我使用的Python 2.7嘲諷(模擬需要安裝一個單獨的模塊)
你檢查了這個:https://medium.com/@echohack/python-unit-testing-injecting-exceptions-with-mock-and-nose-e46bf579c867#.gnrot0dlu –