我希望将单元测试写入现有功能,我发现了以下内容:
我有一个在启动服务或服务列表时旋转新进程的函数,代码如下所示:
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。
答案 0 :(得分:1)
我认为单元测试很有价值。我特别认为单元测试except条件是有价值的,因为它看起来像一个不经常执行的代码路径。
如果由于某些奇怪的原因导致service.__name__
错误会怎样?然后你会抛出另一个例外。
要对此进行单元测试而不更改任何内容,您可以使用unittest.mock
https://docs.python.org/3/library/unittest.mock.html修补multiprocessing
导入,以提供不会产生进程的模拟实现。
另一个选择是将multiprocessing
模块作为参数注入到您的函数中,以便生产代码可以使用multiprocessing
并且您的测试可以代码提供模拟对象