2015-04-02 56 views
0

有一个问题,当我测试使用单元测试模块我的模型,这是当方法,只是一个字符串从“打印”来到我的成功用户的迭代。结果没有显示了什么也没有显示。什么我是洞低于:为什么django不使用unittest显示测试结果?

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选项,但不适用于我。和任何解决方案?提前致谢!

+1

没有单元测试查找以“TEST_”开头的方法?如果将名称更改为test_get_user,会发生什么情况? – devinformatics 2015-04-02 10:37:16

+0

是的,它的确如此,但是即使没有前缀“test_”,它也可以被指定为完整路径,并且我尝试了你的方法,但是不行! – 2015-04-02 10:46:27

+0

你有一个setUp方法实例化测试数据库中的对象吗? – devinformatics 2015-04-02 10:50:57

回答

3

这是正确的,但显示你没有写任何测试。
有你应该知道会不会几件事情要编写单元测试:

  1. 测试功能时,应为test_get_user_query字等测试开始,这是为了让你的测试调用来自:
    ./manage.py test appName所以你不必参考测试的整个路径。
  2. 在单元测试中使用的数据库是从开发数据库,​​这意味着它是完全空的分离,则需要您要测试它每次来填充它,因为你的榜样,你应该开始添加这样一行get_user或在setUp()功能:
    User.objects.create(email='[email protected]', password='somepass'....)(填充剩下的),这样你就可以查询它以后
  3. 使用断言来写你的测试,你不应该使用印刷,这里有一个例子:
class UserModelTest(unittest.TestCase): 
    def test_get_user_and_data_is_serialized(self): 
     User.objects.create(email='[email protected]', password='somepass'....) 
     user = User.objects.all()[0] # start testing one entry. 
     self.assertEqual(user.email, '[email protected]', 'Incorret email') # message when test fails 
     serialized_user = UserSerializer(users,many=False) 
     self.assertEqual(userserializer.data, {'email': '[email protected]', ....}, 'oops the data is not serialized') 

只要改变你对测试数据,这仅仅是一个例子

有更多的了解单元测试模块,阅读本,如果你需要更多的帮助https://docs.python.org/2/library/unittest.html

哈里JW还要检查这本书Percival,一个很好的资源:
http://www.obeythetestinggoat.com/

希望这有助于!

+0

非常好的解释,我会深入探讨:)非常感谢! – 2015-04-02 11:39:51

+0

我推荐你读这本书,我目前正在追踪它,最好你可以找到那里http://www.obeythetestinggoat.com/ – HassenPy 2015-04-02 12:10:42

+0

不错,我会读它,谢谢你的推荐:) – 2015-04-03 02:46:36

相关问题