单元测试触发新进程的功能

Unit testing a function that triggers a new process

我想为现有功能编写单元测试,我遇到了以下问题:

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

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。

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

如果 service.__name__ 由于某些奇怪的原因出错会怎样?那么你又抛出了一个异常。

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

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