当我使用 unittest 模块测试我的模型时出现问题,即除了来自" print"的字符串之外,该过程成功时没有显示任何内容。我的用户迭代的结果没有显示出来。我的洞是在下面:
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'...
我是否错过了关于unittest的事情或任何误解?我注意到有人遇到同样的问题,他们建议做的是添加-- -s
选项,但不适合我。还有什么解决方案吗?提前谢谢!
答案 0 :(得分:3)
这是正确的显示,但你没有写任何测试 为了能够编写单元测试,你应该知道几件事:
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/
希望这有帮助!