我正在爲我的python腳本編寫一些unit tests
。該腳本允許用戶覆蓋參數的值。使用unittest和argparse解析測試參數
python paramParser.py -d C:\\Path\\to\\yourfile\\xxx.m -p 'xxxParamName' -v 20
-d
文件名可能包含一個參數名稱和值
-p
參數名稱
-v
參數值
腳本讀取該文件,如果該參數在它存在的 - 它需要它的價值和用它的新值將它寫入另一個文件。
從command-line
成功運行該參數將覆蓋該參數的值。
這裏是我的代碼:
import unittest
import paramParser
class Tests(unittest.TestCase):
def testOneIntValue(self):
result = paramParser.main(["-d C:\\Path\\to\\yourfile\\xxx.m", "-p 'xxxParamName'", "-v 3"])
self.assertTrue('xxxParamName.Value= 3', result)
def testMultipleIntValues(self):
result = paramParser.main(["-d C:\\Path\\to\\yourfile\\xxx.m", "-p 'xxxParamName'", "-v 3"])
self.assertTrue('[ xxxParamName.Value = [ 1 2 3 ]', result)
def testTrueBoolean(self):
result = paramParser.main(["-d C:\\Path\\to\\yourfile\\xxx.m", "-p 'xxxParamName'", "-v true"])
self.assertTrue('xxxParamName.Value = true', result)
if __name__ == '__main__':
unittest.main()
的測試總是通過,任何知道我做錯了嗎?
編輯 我試圖做同樣的方式與這個傢伙所做的:argparse fails when called from unittest test
def testOneValue(self):
parsed = paramParser.main(["-d","C:\\Path\\to\\yourfile\\xxx.m", "-p", "xxxParamName", "-v", "3"])
self.assertEqual(parsed["d"], "C:\\Path\\to\\yourfile\\xxx.m")
self.assertEqual(parsed["p"], "xxxParamName")
self.assertEqual(parsed["v"], "3")
雖然他的傳球(用的[]的幫助和分離該參數)礦井沒有。我得到這個錯誤:
TypeError: 'NoneType' object has no attribute '__getitem__'
只是關於上一個問題的快速更新。我忘了在我的def main()中添加一個返回值。測試現在正在工作。
你要求測試來評估一個非空字符串是否真實,它**總是**。您是否閱讀過'unittest'的實際文檔? – jonrsharpe
「assertTrue」的第一個參數是一個可以轉換爲「bool」的對象,而不是布爾語句作爲字符串(這是您提供的)。看起來像'assertEqual'可能更適用於前兩個。 – cdarke
查看'argparse'單元測試文件以獲取更多想法,'Lib/test/test_argparse.py' - 儘管這涵蓋的不僅僅是代碼的需要。 – hpaulj