单元测试触发新进程的函数

时间:2015-12-07 14:29:55

标签: python unit-testing python-3.x mocking

我希望将单元测试写入现有功能,我发现了以下内容:

我有一个在启动服务或服务列表时旋转新进程的函数,代码如下所示:

def run_consumer(self, services):
    for service in services: #services is an array of functions which initialize a service
        try:
            name = service.__name__
            process = multiprocessing.Process(target=service, name = service.__name__, args=self.some_arg)
            process.start()
            self.track_services[name].append(process) #defined in the init
        except Exception as ex:
            print('service "{0}" failed with error: {1}'.format(name, ex))

我想弄清楚的是,是否有任何值为这个函数添加单元测试,如果是,它会是什么样的......我正在使用unittest。

1 个答案:

答案 0 :(得分:1)

我认为单元测试很有价值。我特别认为单元测试except条件是有价值的,因为它看起来像一个不经常执行的代码路径。

如果由于某些奇怪的原因导致service.__name__错误会怎样?然后你会抛出另一个例外。

要对此进行单元测试而不更改任何内容,您可以使用unittest.mock https://docs.python.org/3/library/unittest.mock.html修补multiprocessing导入,以提供不会产生进程的模拟实现。

另一个选择是将multiprocessing模块作为参数注入到您的函数中,以便生产代码可以使用multiprocessing并且您的测试可以代码提供模拟对象