Djangoユニットテストノート

10207 ワード

引用する
ユニットテストの基本的な知識はここでは説明しません.簡単な一言です.ユニットテストは1つのコードで別のコードをテストします.最も一般的なフレームワークはunittestであり、pythonのユニットテストフレームワークであり、djangoユニットテストフレームワークtestである.TestCaseはpythonを継承したunittestです.TestCase.
TestCaseもunittest.TestCaseはさらにパッケージ化され、selfを定義するなど、書くコードを繰り返す必要がなくなりました.Client、Email Serviceは、便利なメール送信方法を提供しています.
djangoモードはMTVモデルであることはよく知られており、TはテンプレートであるHTMLファイルであり、HTMLにとって測定可能なコードはなく、基本的には死んでおり、あっても重要な論理コードではない.したがって,ユニットテストを行う際には,MとVの展開,すなわちmodelsとviewsに重点を置く.
 
モード
ユニットテストの2つの方法:
1.djangoフレームワークに付属するtestsを使用する.pyファイルはユニットテストを行います.2.カスタム作成test.pyファイル;どちらも同じですが、実行時に実行されるディレクトリが異なるだけです.
注:ここでは1つだけ紹介します.
 
モデルテスト
まず、共通ライブラリをインポートします.
from django.test import TestCase
from django_web.models import Event,Guest
from django.contrib.auth.models import User
# Create your tests here.
import datetime
get_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

 
モデルのテスト
class DjangoWebModelTest(TestCase):
    """    """
    def setUp(self) -> None:
        Event.objects.create(id=1,name='  5',status=True,address='  ',limit=3,start_time=get_now)
        Guest.objects.create(id=1,event_id=1,realname='  ',phone=15099925893,email='[email protected]',sign=False)

    def test_event_model(self):
        """      """
        result = Event.objects.get(name='  5')
        self.assertEqual(result.address,'  ')
        self.assertTrue(result.status)

    def test_guest_model(self):
        """     """
        result = Guest.objects.get(phone='15099925893')
        self.assertEqual(result.realname,'  ')
        self.assertFalse(result.sign)

 
ビュー関数テスト
class IndexPageTest(TestCase):
    """  index    """

    def test_index_page(self):
        """  index  """
        response = self.client.get('/index/')
        self.assertEqual(response.status_code,200)
        self.assertTemplateUsed(response,'index.html')

class LoginAction(TestCase):
    """      """
    def setUp(self) -> None:
        """      :           """
        User.objects.create(username='admin')
        User.objects.create_user(username='admin2',email='[email protected]',password='123456')

    def test_add_admin(self):
        """    admin  """
        user = User.objects.get(username='admin')
        self.assertEqual(user.username,'admin')

    def test_add_admin2(self):
        """    admin2  """
        user = User.objects.get(username='admin2')
        self.assertEqual(user.username,'admin2')
        self.assertEqual(user.email,'[email protected]')

    def test_login_username_password_null(self):
        """       """
        test_data = {'username':'','password':''}
        response = self.client.post('/login_action/',data=test_data)
        self.assertEqual(response.status_code,302)

    def test_login_username_password_error(self):
        """       """
        test_data = {'username':'test','password':'123456'}
        response = self.client.post('/login_action/',data=test_data)
        self.assertEqual(response.status_code,302)

    def test_login_action_success(self):
        """    """
        test_data = {'username':'admin2','password':'123456'}
        response = self.client.post('/login_action/',data=test_data)
        self.assertEqual(response.status_code,302)


class EventManageTest(TestCase):
    """     """

    def setUp(self) -> None:
        #      
        User.objects.create_user('admin','[email protected]','123456')
        Event.objects.create(name='  3',limit=3,address='  ',status=True,start_time=get_now)
        self.login_user = {'username':'admin','password':'123456'}
        #    
        self.client.post('/login_action/', data=self.login_user)

    def test_add_event_data(self):
        """        :  3 """
        event = Event.objects.get(name="  3")
        self.assertEqual(event.address, "  ")

    def test_event_success(self):
        """     :  3"""
        response = self.client.post('/event_manager/')
        self.assertEqual(response.status_code,200)
        self.assertIn("  3".encode('utf-8'),response.content)

    def test_event_search_success(self):
        """       """
        response = self.client.post('/search_name/')
        self.assertEqual(response.status_code,200)
        self.assertIn('  3'.encode('UTF-8'),response.content)



class GuestManageTest(TestCase):
    """    """
    def setUp(self) -> None:
        User.objects.create_user('admin','[email protected]','123456')
        Event.objects.create(id=1,name='  2',limit=3,address='  ',status=True,start_time=get_now)
        Guest.objects.create(realname='   ',phone=15099925798,email='[email protected]',sign=0,event_id=1)
        self.login_user = {'username':'admin','password':'123456'}
        #    
        self.client.post('/login_action/',data=self.login_user)

    def test_add_guest(self):
        """      :   """
        guest =Guest.objects.get(realname='   ')
        self.assertEqual(guest.realname,'   ')
        self.assertEqual(guest.phone,'15099925798')
        self.assertEqual(guest.email,'[email protected]')
        self.assertFalse(guest.sign)

    def test_guest_success(self):
        """      :   """
        response = self.client.post('/guest_manager/')
        self.assertEqual(response.status_code,200)
        self.assertIn('   '.encode('UTF-8'),response.content)
        self.assertIn('15099925798'.encode('utf-8'),response.content)

    def test_guest_search_success(self):
        """      """
        response = self.client.post('/search_phone/')
        self.assertEqual(response.status_code,200)
        self.assertIn('   '.encode('utf-8'),response.content)
        self.assertIn('15099925798'.encode('utf-8'),response.content)


class SignIndexActionTest(TestCase):
    """     """
    def setUp(self) -> None:
        User.objects.create_user('admin','[email protected]','123456')
        Event.objects.create(id=1, name='  1', limit=3, address='  ', status=True, start_time=get_now)
        Event.objects.create(id=2, name='  9', limit=3, address='  ', status=True, start_time=get_now)
        Guest.objects.create(realname='  ', phone=15099925798, email='[email protected]', sign=0, event_id=1)   #   
        Guest.objects.create(realname='  ', phone=15099925700, email='[email protected]', sign=1, event_id=2)   #   
        self.login_user = {'username':'admin','password':'123456'}
        self.client.post('/login_action/',data=self.login_user)

    def test_phone_null(self):
        """        """
        response =self.client.post('/sign_index_action/1/',{"phone":""})
        self.assertEqual(response.status_code,200)
        self.assertIn('       .'.encode('utf-8'),response.content)

    def test_phone_error(self):
        """      """
        response = self.client.post('/sign_index_action/2/',{"phone":"15099925732398"})
        self.assertEqual(response.status_code,200)
        self.assertIn("      .".encode('UTF-8'),response.content)

    def test_phone_or_eventid_error(self):
        """               """
        response = self.client.post('/sign_index_action/2/',{"phone":"15099925798"})
        self.assertEqual(response.status_code,200)
        self.assertIn("               .".encode('UTF-8'),response.content)

    def test_already_sign(self):
        """     """
        response = self.client.post('/sign_index_action/2/',{"phone":"15099925700"})
        self.assertEqual(response.status_code,200)
        self.assertIn("     !.".encode('utf-8'),response.content)

    def test_sign_success(self):
        """    """
        response = self.client.post('/sign_index_action/1/',{"phone":"15099925798"})
        self.assertEqual(response.status_code,200)
        self.assertIn("    !".encode('utf-8'),response.content)

 
ユニットテストコードの実行
"""
      :
python3 manage.py test

  django_web        :
python3 manage.py test django_web

  sign    tests.py    :
python3 manage.py test django_web.tests

  django_web    tests.py     DjangoWebModelTest    :
python3 manage.py test django_web.tests.DjangoWebModelTest

  django_web   DjangoWebModelTest          (  ):
python3 manage.py test django_web.tests.DjangoWebModelTest.test_event_model

        
  python3 manage.py test django_web -p test*.py 
......

"""

 
実行結果
D:\my_django_guest>python3 manage.py test django_web
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
...................
----------------------------------------------------------------------
Ran 19 tests in 3.080s

OK
Destroying test database for alias 'default'...