为什么 django 不使用 unittest 显示测试结果?
Why django not display test result using unittest?
当我使用 unittest 模块测试我的模型时出现问题,即当过程成功时除了来自 [=36= 的字符串之外没有显示任何内容].我的用户迭代结果没有显示 up.What 我是东在下面:
1,models.py
class UserManager(models.Manager):
def hah(self):
return None
class User(models.Model):
id = models.IntegerField(primary_key=True)
email = models.CharField(unique=True, max_length=50)
password = models.CharField(max_length=50)
logintime = models.IntegerField(default='')
registertime = models.IntegerField()
modifytime = models.IntegerField()
loginip = models.CharField(max_length=60)
islock = models.IntegerField()
isavtive = models.IntegerField()
activecode = models.CharField(max_length=45)
role = models.CharField(max_length=1)
objects = UserManager()
class Meta:
db_table = 'user'
2,serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id','email','password','loginip')
3,tests.py
class UserModelTest(unittest.TestCase):
def get_user(self):
users = User.objects.all()
userserializer = UserSerializer(users,many=True)
print(userserializer.data)
print(users)
for row in users:
print(row.email)
print("this is user model test")
当我运行python3.4 ./manage.py test user.tests.UserModelTest.get_user
时,结果是:
Creating test database for alias 'default'...
[]
[]
this is user model test
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Destroying test database for alias 'default'...
我是否遗漏了什么或对单元测试有任何误解?我注意到有人有同样的问题,他们被建议做的是添加 -- -s
选项,但不适用于 me.And 任何解决方案?提前致谢!
这是正确的显示,但您没有编写任何测试。
为了能够编写单元测试,您应该知道一些事情:
- 您的测试函数应该以单词 test 开头,例如
test_get_user_query
,这是为了让您的测试可以从以下位置调用:
./manage.py test appName
这样您就不必引用测试的整个路径。
- 单元测试中使用的数据库与您的开发数据库是隔离的,这意味着它是完全空的,您每次要测试它时都需要填充它,对于您的示例,您应该在
get_user
或 setUp()
函数的开始:
User.objects.create(email='exp@me.com', password='somepass'....)
(填充其余部分)以便稍后查询
- 使用断言来编写测试,你不应该使用打印,这是一个例子:
class UserModelTest(unittest.TestCase):
def test_get_user_and_data_is_serialized(self):
User.objects.create(email='exp@me.com', password='somepass'....)
user = User.objects.all()[0] # start testing one entry.
self.assertEqual(user.email, 'exp@me.com', 'Incorret email') # message when test fails
serialized_user = UserSerializer(users,many=False)
self.assertEqual(userserializer.data, {'email': 'exp@me.com', ....}, 'oops the data is not serialized')
只需更改您要测试的数据,这只是一个示例
关于 unittest 模块还有很多要了解的,如果您需要更多帮助,请阅读此内容 https://docs.python.org/2/library/unittest.html
另请参阅 Harry J.W.Percival 的这本书,这是一个很好的资源:
http://www.obeythetestinggoat.com/
希望对您有所帮助!
当我使用 unittest 模块测试我的模型时出现问题,即当过程成功时除了来自 [=36= 的字符串之外没有显示任何内容].我的用户迭代结果没有显示 up.What 我是东在下面:
1,models.py
class UserManager(models.Manager):
def hah(self):
return None
class User(models.Model):
id = models.IntegerField(primary_key=True)
email = models.CharField(unique=True, max_length=50)
password = models.CharField(max_length=50)
logintime = models.IntegerField(default='')
registertime = models.IntegerField()
modifytime = models.IntegerField()
loginip = models.CharField(max_length=60)
islock = models.IntegerField()
isavtive = models.IntegerField()
activecode = models.CharField(max_length=45)
role = models.CharField(max_length=1)
objects = UserManager()
class Meta:
db_table = 'user'
2,serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id','email','password','loginip')
3,tests.py
class UserModelTest(unittest.TestCase):
def get_user(self):
users = User.objects.all()
userserializer = UserSerializer(users,many=True)
print(userserializer.data)
print(users)
for row in users:
print(row.email)
print("this is user model test")
当我运行python3.4 ./manage.py test user.tests.UserModelTest.get_user
时,结果是:
Creating test database for alias 'default'...
[]
[]
this is user model test
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Destroying test database for alias 'default'...
我是否遗漏了什么或对单元测试有任何误解?我注意到有人有同样的问题,他们被建议做的是添加 -- -s
选项,但不适用于 me.And 任何解决方案?提前致谢!
这是正确的显示,但您没有编写任何测试。
为了能够编写单元测试,您应该知道一些事情:
- 您的测试函数应该以单词 test 开头,例如
test_get_user_query
,这是为了让您的测试可以从以下位置调用:
./manage.py test appName
这样您就不必引用测试的整个路径。 - 单元测试中使用的数据库与您的开发数据库是隔离的,这意味着它是完全空的,您每次要测试它时都需要填充它,对于您的示例,您应该在
get_user
或setUp()
函数的开始:
User.objects.create(email='exp@me.com', password='somepass'....)
(填充其余部分)以便稍后查询 - 使用断言来编写测试,你不应该使用打印,这是一个例子:
class UserModelTest(unittest.TestCase): def test_get_user_and_data_is_serialized(self): User.objects.create(email='exp@me.com', password='somepass'....) user = User.objects.all()[0] # start testing one entry. self.assertEqual(user.email, 'exp@me.com', 'Incorret email') # message when test fails serialized_user = UserSerializer(users,many=False) self.assertEqual(userserializer.data, {'email': 'exp@me.com', ....}, 'oops the data is not serialized')
只需更改您要测试的数据,这只是一个示例
关于 unittest 模块还有很多要了解的,如果您需要更多帮助,请阅读此内容 https://docs.python.org/2/library/unittest.html
另请参阅 Harry J.W.Percival 的这本书,这是一个很好的资源:
http://www.obeythetestinggoat.com/
希望对您有所帮助!