Как определить, когда тестирование носа выполняется программно
Notest - это тестовая среда по умолчанию в Turbogeras 2.0. В приложении есть модуль websetup.py, который инициализирует базу данных. Я использую mysql для своей среды разработки и производства, и websetup работает нормально, но тест с носом использует sqlite для памяти, и при попытке инициализации БД выдает ошибку:
TypeError: типы SQLite Date, Time и DateTime принимают только объекты даты и времени Python в качестве входных данных.
Я обнаружил, когда это происходит, и находится в базе данных импорта:
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 ответа
Предположительно, если нос работает, модуль верхнего уровня "нос" будет импортирован. Вы должны быть в состоянии проверить это с
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
Конечно, это не надежный тест, который предполагает, что нет другой причины, почему нос был бы импортирован.
Я не пользуюсь TurboGears, но нет ли где-нибудь параметра или глобального параметра, указывающего, что тесты запущены? В больших системах часто есть небольшие изменения, которые необходимо внести при запуске тестов. Переключение между SQLite и MySQL - это только один пример.