单元测试触发新进程的功能
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
而您的测试代码可以提供模拟对象
我想为现有功能编写单元测试,我遇到了以下问题:
我有一个函数可以在启动服务或服务列表时旋转一个新进程,代码如下所示:
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
而您的测试代码可以提供模拟对象