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

时间:2009-09-30 19:34:50

标签: python sqlalchemy nosetests

nosetest 是Turbogeras 2.0中的默认测试框架。该应用程序有一个初始化数据库的websetup.py模块。我使用mysql进行开发和生产环境,websetup工作正常,但 nosetest 在内存上使用sqlite,当它尝试初始化数据库时发送错误:

  

TypeError:SQLite日期,时间和   DateTime类型只接受Python   datetime对象作为输入。

我已经检测到这种情况何时发生并且在导入fase中:

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)

我怎么知道什么时候测试运行?我试过了:

if globals().has_key('ModelTest'):

if vars().has_key('ModelTest'):

第一个没有结果,第二个有错误

2 个答案:

答案 0 :(得分:0)

我不使用TurboGears,但是没有设置或全局某处指示测试正在运行?在大型系统中,运行测试时通常需要进行小的更改。在SQLite和MySQL之间切换只是一个例子。

答案 1 :(得分:0)

假如鼻子正在运行,那么“鼻子”顶级模块将被导入。您应该可以使用

进行测试
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

当然,这不是一个万无一失的测试,它假设没有其他原因可以导入鼻子。