您的位置:首页 > 编程语言 > Go语言

django test模块

2014-01-02 15:20 218 查看
今天试了试django自带的test模块,断点执行到一下代码中时发现一点儿小问题:

def _create_test_db(self, verbosity, autoclobber):
"""
Internal implementation - creates the test db tables.
"""
suffix = self.sql_table_creation_suffix()

test_database_name = self._get_test_db_name()

qn = self.connection.ops.quote_name

# Create the test database and connect to it. We need to autocommit
# if the database supports it because PostgreSQL doesn't allow
# CREATE/DROP DATABASE statements within transactions.
cursor = self.connection.cursor()
self._prepare_for_test_db_ddl()
try:
cursor.execute(
"CREATE DATABASE %s %s" % (qn(test_database_name), suffix))
except Exception as e:
sys.stderr.write(
"Got an error creating the test database: %s\n" % e)
if not autoclobber:
confirm = input(
"Type 'yes' if you would like to try deleting the test "
"database '%s', or 'no' to cancel: " % test_database_name)
if autoclobber or confirm == 'yes':
try:
if verbosity >= 1:
print("Destroying old test database '%s'..."
% self.connection.alias)
cursor.execute(
"DROP DATABASE %s" % qn(test_database_name))
cursor.execute(
"CREATE DATABASE %s %s" % (qn(test_database_name),
suffix))
except Exception as e:
sys.stderr.write(
"Got an error recreating the test database: %s\n" % e)
sys.exit(2)
else:
print("Tests cancelled.")
sys.exit(1)

return test_database_name


有问题的代码在于,confirm根本无法从dos输入获得‘yes’,因为输入后,会将换行符'\r'也读进去。因此,无论输入yes 还是cancel,都会走到线面的else分支,

print("Tests cancelled.")
sys.exit(1)





改掉代码后,正确执行,销毁旧的database,新建了test database。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: