sbe*_*rry 30 python unit-testing
我有一个脚本,作为使用Python unittest模块编写的一些单元测试的包装器.除了清理一些文件,创建输出流和生成一些代码之外,它还将测试用例加载到套件中
unittest.TestLoader().loadTestsFromTestCase()
Run Code Online (Sandbox Code Playgroud)
我已经optparse用来提取几个用于确定输出位置的命令行参数,是否重新生成代码以及是否进行一些清理.我还想传递一个配置变量,即端点URI,以便在测试用例中使用.
我意识到我可以添加一个OptionParserTestCase的setUp方法,但我希望将选项传递给setUp.这可能用loadTestsFromTestCase()吗?我可以迭代返回TestSuite的TestCases,但是我可以手动调用setUp TestCases吗?
**编辑**我想指出我能够传递参数,setUp如果我迭代测试并setUp手动调用,如:
(options, args) = op.parse_args()
suite = unittest.TestLoader().loadTestsFromTestCase(MyTests.TestSOAPFunctions)
for test in suite:
test.setUp(options.soap_uri)
Run Code Online (Sandbox Code Playgroud)
但是,我正在使用xmlrunner它,它的run方法以一个TestSuite参数为例.我假设它将运行setUp方法本身,所以我需要在其中可用的参数XMLTestRunner.
我希望这是有道理的.
jps*_*jps 47
好吧,我想做同样的事情,并打算自己提出这个问题.我想改进以下代码,因为它有重复.它允许我发送参数来测试TestCase但是:
import unittest
import helpspot
class TestHelpSpot(unittest.TestCase):
"A few simple tests for HelpSpot"
def __init__(self, testname, path, user, pword):
super(TestHelpSpot, self).__init__(testname)
self.hs = helpspot.HelpSpot(path, user, pword)
def test_version(self):
a = self.hs.version()
b = self.hs.private_version()
self.assertEqual(a, b)
def test_get_with_param(self):
a = self.hs.filter_get(xFilter=1)
def test_unknown_method(self):
self.assertRaises(helpspot.HelpSpotError, self.hs.private_wuggienorple)
if __name__ == '__main__':
import sys
user = sys.argv[1]
pword = sys.argv[2]
path = sys.argv[3]
test_loader = unittest.TestLoader()
test_names = test_loader.getTestCaseNames(TestHelpSpot)
suite = unittest.TestSuite()
for test_name in test_names:
suite.addTest(TestHelpSpot(test_name, path, user, pword))
result = unittest.TextTestRunner().run(suite)
sys.exit(not result.wasSuccessful())
Run Code Online (Sandbox Code Playgroud)
if __name__ == '__main__':
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-z", "--zebra",
action="store_true", dest="zebra", default=False,
help="run like a zebra")
(options, args) = parser.parse_args()
if options.zebra:
zebrafy()
# remove our args because we don't want to send them to unittest
for x in sum([h._long_opts+h._short_opts for h in parser.option_list],[]):
if x in sys.argv:
sys.argv.remove(x)
unittest.main()
Run Code Online (Sandbox Code Playgroud)