Как определить, когда nosetest выполняется программно

StackOverflow https://stackoverflow.com/questions/1500214

  •  19-09-2019
  •  | 
  •  

Вопрос

проверка носа является тестовой платформой по умолчанию в Turbogeras 2.0.Приложение имеет websetup.py модуль, который инициализирует базу данных.Я использую mysql для своей среды разработки и производства, и websetup работает нормально, но проверка носа использует sqlite в памяти, и когда он пытается инициализировать базу данных, он отправляет сообщение об ошибке:

Ошибка типа:Типы даты, времени и SQLite 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)

Как я могу определить, когда запущен nosetest?Я пытался:

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

и

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

Первый безрезультатный, а второй с ошибкой

Это было полезно?

Решение

Предположительно, если 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 был бы импортирован.

Другие советы

Я не использую TurboGears, но нет ли где-нибудь настройки или глобального параметра, указывающего на то, что тесты запущены?В больших системах часто возникают небольшие изменения, которые необходимо внести при выполнении тестов.Переключение между SQLite и MySQL - это лишь один пример.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top