0

ノーズテストは、 Turbogeras 2.0 のデフォルトのテスト フレームワークです。アプリケーションには、データベースを初期化する websetup.py モジュールがあります。私は開発環境と本番環境に mysql を使用しており、websetup は正常に動作しますが、nosetestはメモリ上で sqlite を使用し、DB を初期化しようとするとエラーが送信されます。

TypeError: SQLite の Date、Time、および DateTime 型は、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)

ノーズテストがいつ実行されているかを知るにはどうすればよいですか? 私は試しました:

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

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

結果のない最初のものとエラーのある2番目のもの

4

2 に答える 2

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

もちろん、これは鼻がインポートされる他の理由がないことを前提とした、絶対確実なテストではありません。

于 2009-10-02T14:01:57.850 に答える
0

私は TurboGears を使用していませんが、テストが実行されていることを示す設定またはグローバルはどこかにありませんか? 大規模なシステムでは、テストの実行時に小さな変更を加える必要があることがよくあります。SQLite と MySQL の切り替えは、ほんの一例です。

于 2009-09-30T19:55:57.760 に答える