我目前正在創建一些單元測試。我對他們相當陌生,只是試圖弄溼我的腳。所以我試圖運行的當前測試是根據用戶輸入檢查預期輸出。所以我會用某種類型的值修補輸入,然後檢查最後是否收到stdout消息。聽起來有點混亂,但我希望有人能提供幫助。這是我的運行代碼。Python單元測試If語句的預期輸出
def main():
Attack = input("Are we being attacked?!")
if(Attack == "yes"):
print("We are being attacked! Attack Back!")
所以在上面的例子中,我會測試打印語句,因爲我會修補用戶輸入的值爲yes。這裏是我的測試套件
import unittest
from unittest.mock import patch
import io
import sys
from RunFile import main
class GetInputTest(unittest.TestCase):
@patch('builtins.input', return_value='yes')
def test_output(self):
saved_stdout = sys.stdout
try:
out = io.StringIO()
sys.stdout = out
main()
output = out.getvalue().strip()
self.assertEqual(output, "We are being attacked! Attack Back!")
finally:
sys.stdout = saved_stdout
if __name__ == "__main__":
unittest.main()
所以這顯然不起作用。那麼我錯過了什麼?謝謝大家!
EDITED:這是我運行測試時得到的錯誤消息。我明白這個錯誤,只是不知道如何去解決它。
Error
Traceback (most recent call last):
File "C:\Python33\lib\unittest\mock.py", line 1087, in patched
return func(*args, **keywargs)
TypeError: test_output() takes 1 positional argument but 2 were given
是明擺着的嗎?會發生什麼呢? 「'我們被攻擊了!'反擊!'與'」Hello Pirate!「有關?」'? – jonrsharpe 2014-09-02 22:06:49
糟糕。我的錯。完全忘記改變這一點。但不管它仍然不適合我。我編輯了我的代碼。 @jonrsharpe – SalceCodec 2014-09-02 22:15:14
您確定在您的測試中調用了正確的「main()」嗎?會發生什麼?它只是在斷言失敗? – shieldstroy 2014-09-02 22:25:06