如何在IronPython中使用nose?

0 投票
2 回答
1085 浏览
提问于 2025-04-16 00:57

我在命令行上用 'setup.py install' 安装了nose,现在可以运行 'nosetests',任何符合testMatch正则表达式的Python文件都会被自动检测并在 %python home%\Scripts 目录下进行测试。现在我想让nose也能在我的IronPython文件上工作,请问我该如何在 %Iron Python home% 目录下安装nose?我注意到我的IronPython主目录里甚至没有Scripts文件夹。

如果我尝试用IronPython代码运行 'nosetests',就会出现各种异常,比如说找不到名为clr的模块。

有没有人用nose和IronPython一起?如果有的话,请指导我。我为这个问题纠结了一整天,目前我唯一的解决办法是在我的IronPython代码中添加以下内容:

 import nose 
 nose.main(argv=['<arguments>'])

这难道是使用nose在IronPython文件中唯一的方法吗?

如果没有其他方法,我想知道如何使用nose的多个插件,特别是覆盖率插件?我为python2.6安装了它,但如何让它在IronPython中工作呢?

我之所以问这个,是因为在Python中,使用插件只需在命令行中调用就可以了,但在IronPython中,我不知道该怎么做。

2 个回答

0

我一直在尝试运行sqlalchemy的测试套件,这个测试套件使用了nose和一个插件。所以,如果有人想在ironpython上运行nose并使用插件,这可能会对你有帮助。

在ironpython上,这个过程通常不会很顺利,因为setuptools在ironpython上并不是完全兼容的。

经过一番探索,我找到了nose的init.py文件,里面有手动注册插件的说明——简单来说,就是导入插件类(这个类是nose.plugins.Plugin的子类),然后把它添加到main()的调用中。

这是我最后写的脚本:

import sys, os
#import ironclad #not needed. i think.
sys.path.append(r'C:\Python26\lib')
#now load Jeff Hardys sqlite dll which is in sqlite folder (sqlite not supported on ipy)
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)),'sqlite'))
import clr
clr.AddReference('IronPython.SQLite')
#load plugin
from sqlalchemy.test.noseplugin import NoseSQLAlchemy
from nose import main
if __name__ == '__main__':
    main(addplugins=[NoseSQLAlchemy()])

希望这对某些人有帮助!

0

你的解决方案其实就是nosetests所做的事情:

#!/usr/bin/env python

from nose import main

if __name__ == '__main__':
    main()

你需要确保把你系统的Python库添加到路径中,这样它才能找到nose扩展:

>>>import sys
>>>sys.path.append(r'C:\Python26\lib')

而且你要确保用ipy.exe来运行你的脚本,而不是用你系统的Python可执行文件。

撰写回答