2015-04-02 60 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

相關問題