Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
作为程序的一个选项运行python单元测试_Python_Unit Testing - Fatal编程技术网

作为程序的一个选项运行python单元测试

作为程序的一个选项运行python单元测试,python,unit-testing,Python,Unit Testing,我是python的高手。 我对python单元测试应该如何为实际应用程序构建和运行感到困惑,也就是说,如果我有一个从主方法启动的程序,我应该能够通过相同的入口点为这个程序启动单元测试? 因此,我试图创建一个程序,其中一个参数应该告诉程序运行单元测试,而不是正常执行(见下文),但也能够接受unittest.main()可以接受的所有参数。如果我所采用的方法是正确的,我将非常感谢任何关于以pythonic方式分离实际程序执行和单元测试的更好方法的建议,或者以下示例的任何帮助: class MyCla

我是python的高手。 我对python单元测试应该如何为实际应用程序构建和运行感到困惑,也就是说,如果我有一个从主方法启动的程序,我应该能够通过相同的入口点为这个程序启动单元测试? 因此,我试图创建一个程序,其中一个参数应该告诉程序运行单元测试,而不是正常执行(见下文),但也能够接受unittest.main()可以接受的所有参数。如果我所采用的方法是正确的,我将非常感谢任何关于以pythonic方式分离实际程序执行和单元测试的更好方法的建议,或者以下示例的任何帮助:

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


谢谢

我会将类(测试中的“单元”)单独放在一个文件中,“主”程序和单元测试放在另外两个文件中。后者是可执行脚本;第一个简单地由他们导入。

因为我不想更改部署模式,我只是从模块中提取了单元测试,它确实起作用。谢谢