如何以编程方式判断nosetest是否在运行
nosetest 是 Turbogeras 2.0 中默认的测试框架。这个应用有一个叫做 websetup.py 的模块,用来初始化数据库。我在开发和生产环境中使用 mysql,websetup 运行得很好。但是 nosetest 在内存中使用 sqlite,当它尝试初始化数据库时就会出现一个错误:
类型错误:SQLite 的日期、时间和日期时间类型只接受 Python 的 datetime 对象作为输入。
我发现这个问题发生在导入阶段:
csvreader = csv.reader(open('res/products.csv'), delimiter=",", quotechar="'")
for row in csvreader:
p = model.Product(row[1], row[2], row[3], row[4] + ".jpg")
# Even tried to convert the date to a sqlalchemy type
# need to put a conditional here, when testing I don't care this date
import sqlalchemy
dateadded = sqlalchemy.types.DateTime(row[5])
p.dateAdded = dateadded
p.brand_id = row[6]
p.code = row[3]
ccat = model.DBSession.query(model.Category)\
.filter(model.Category.id==int(row[8]) + 3).one()
p.categories.append(ccat)
p.normalPrice = row[9]
p.specialPrice = row[10]
p.discountPrice = row[11]
model.DBSession.add(p)
我怎么知道 nosetest 什么时候在运行呢?我试过:
if globals().has_key('ModelTest'):
还有
if vars().has_key('ModelTest'):
第一个没有结果,第二个出现了错误。
2 个回答
0
我不使用TurboGears,但难道没有一个设置或者全局选项可以表明测试正在运行吗?在大型系统中,通常会有一些小的调整需要在运行测试时进行。比如说,切换使用SQLite和MySQL就是一个例子。
0
可以推测,如果“nose”正在运行,那么“nose”这个顶层模块应该已经被导入了。你可以用下面的代码来测试一下:
if 'nose' in sys.modules:
print "Nose is running, or at least has been imported!"
#or whatever you need to do if nose is running
当然,这个测试并不是绝对可靠的,因为它假设没有其他原因会导致“nose”被导入。