作为程序的一个选项运行python单元测试
我是python的高手。 我对python单元测试应该如何为实际应用程序构建和运行感到困惑,也就是说,如果我有一个从主方法启动的程序,我应该能够通过相同的入口点为这个程序启动单元测试? 因此,我试图创建一个程序,其中一个参数应该告诉程序运行单元测试,而不是正常执行(见下文),但也能够接受unittest.main()可以接受的所有参数。如果我所采用的方法是正确的,我将非常感谢任何关于以pythonic方式分离实际程序执行和单元测试的更好方法的建议,或者以下示例的任何帮助:作为程序的一个选项运行python单元测试,python,unit-testing,Python,Unit Testing,我是python的高手。 我对python单元测试应该如何为实际应用程序构建和运行感到困惑,也就是说,如果我有一个从主方法启动的程序,我应该能够通过相同的入口点为这个程序启动单元测试? 因此,我试图创建一个程序,其中一个参数应该告诉程序运行单元测试,而不是正常执行(见下文),但也能够接受unittest.main()可以接受的所有参数。如果我所采用的方法是正确的,我将非常感谢任何关于以pythonic方式分离实际程序执行和单元测试的更好方法的建议,或者以下示例的任何帮助: class MyCla
class MyClass
def write_to_file(self, file):
open(file, 'w').write("Hello world!")
class MyClassTest (unittest.TestCase)
self.mc = MyClass()
self.test_file = os.path.join(os.path.curdir, "a_file.txt")
def setUp(self):
pass
def test_write_to_file(self):
try:
write_to_file(self.test_file)
except IOError:
self.fail("Error!")
if __name__== "__main__":
parser = argparse.ArgumentParser(description="Some desc")
group = parser.add_mutually_exclusive_group()
group.add_argument("-w", "--write", help=': write hello world to given file')
group.add-argument("-t", "--test", help=': run unit tests, use "all" to run all tests')
args = parser.parse_args(sys.argv[1:])
mcl = MyClass()
if args.write:
mcl.write_to_file(args.write)
# below is the questionnable part
if args.test:
#removing -t or --test argument because otherwise unittest.main() will complain
del sys.argv[1:]
if args.test == "all":
unittest.main()
else:
# Adding the argument that was specified after the -t into the sys.argv to be picked up by the unittest.main() - doesn't work correctly (1)
sys.argv.append(args.test)
unittest.main()
(1) 如果我使用-t MyTestCase选项指定执行MyClass,我希望它能够按照帮助消息unittest.main()运行,但它说有一个AttributeError:'module'对象没有属性MyTestCase
谢谢 我会将类(测试中的“单元”)单独放在一个文件中,“主”程序和单元测试放在另外两个文件中。后者是可执行脚本;第一个简单地由他们导入。因为我不想更改部署模式,我只是从模块中提取了单元测试,它确实起作用。谢谢