2013-01-15 36 views
1

我们有一堆调用Python C/C++绑定的测试。我们有鼻子运行这些测试:保护鼻子免受Python解释器崩溃

nosetests myapp 
..... 
---------------------------------------------------------------------- 
Ran 5 tests in 0.009s 

有时,它发生,我们的绑定是越野车,引起了Python解释器崩溃,比如,在测试数3:

test03_badcode (myapp.tests.test_badcode) ... Segmentation fault 

问:什么是最好的方法来从这个恢复?理想情况下,我宁愿鼻子处理这些崩溃本身 ,但我明白这是不可能实现 。我想到的下一个解决方案是注意测试和重新开始,现在跳过了不好的测试。在我的例子中,这将意味着执行测试1,2,4和5,但而不是测试3.有没有办法用鼻子编程实现这个?任何其他更好的想法?

回答

3

像往常一样用鼻子,有一个插件。 Insulate将在单独的过程中运行每个测试。这会减慢速度,但你可以保证在一次测试中发生崩溃不会影响其他测试。

+0

不错,但不知何故,这个插件无法正确使用跳过的测试。我在主/从通讯中遇到'RuntimeError:协议错误'异常。你有一个简单的解决办法吗? –

+0

查看模块后,我们创建了[一个插件版本](https://github.com/idiap/bob/blob/master/python/bob/test/insulate.py),支持跳过的测试。这似乎在我们的构建中正常工作。 –