如何以编程方式判断nosetest是否在运行

0 投票
2 回答
602 浏览
提问于 2025-04-15 14:42

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”被导入。

撰写回答