簡體   English   中英

更多pythonic測試方法

[英]more pythonic way to test

好的,我正在為我的Django應用程序編寫測試。 我試圖找出一種方法來迭代測試以獲取適當響應的ajax注冊調用。 它正在工作,但我知道可以以更有效的方式完成它。

def test_ajax_register(self):
    c = Client()
    # Check register success
    response = c.post('/register/', {
        'register-username': 'testuser',
        'register-email': 'testuser@email.com',
        'register-password': 'password'
    })
    self.assertEqual(json.loads(response.content)['status'], 'success')
    self.assertEqual(response.status_code, 200)

    # Check register failed  username taken
    response = c.post('/register/', {
        'register-username': 'testuser',
        'register-email': 'testuser@email.com',
        'register-password': 'password'
    })
    self.assertEqual(json.loads(response.content)['status'], 'fail')
    self.assertEqual(json.loads(response.content)['error_msg'], 'username already in use')

    # Check register failed email in use
    response = c.post('/register/', {
        'register-username': 'testuser1',
        'register-email': 'testuser@email.com',
        'register-password': 'password'
    })
    self.assertEqual(json.loads(response.content)['status'], 'fail')
    self.assertEqual(json.loads(response.content)['error_msg'], 'email already in use')

    # Check register failed  password length
    response = c.post('/register/', {
        'register-username': 'testuser2',
        'register-email': 'testuser2@email.com',
        'register-password': 'pass'
    })
    self.assertEqual(json.loads(response.content)['status'], 'fail')
    self.assertEqual(json.loads(response.content)['error_msg'], 'password must be atleast 8 characters long')

只需將測試分成單獨的方法即可。 只要它們具有前綴test_ ,它們就會被觸發,並且每個測試也可以作為獨立測試運行。 如果需要預設任何內容,請使用setUp和tearDown方法。

def test_ajax_register(self):
    # Test registration 
    c = Client()
    # Check register success
    response = c.post('/register/', {
        'register-username': 'testuser',
        'register-email': 'testuser@email.com',
        'register-password': 'password'
    })
    self.assertEqual(json.loads(response.content)['status'], 'success')
    self.assertEqual(response.status_code, 200)


def test_failed_registration(self):
    # Check register failed  username taken
    response = c.post('/register/', {
        'register-username': 'testuser',
        'register-email': 'testuser@email.com',
        'register-password': 'password'
    })
    self.assertEqual(json.loads(response.content)['status'], 'fail')
    self.assertEqual(json.loads(response.content)['error_msg'], 'username already in use')


def test_email_in_use(self):
    # Check register failed email in use
    response = c.post('/register/', {
        'register-username': 'testuser1',
        'register-email': 'testuser@email.com',
        'register-password': 'password'
    })
    self.assertEqual(json.loads(response.content)['status'], 'fail')
    self.assertEqual(json.loads(response.content)['error_msg'], 'email already in use')


def test_password_length(self):
    # Check register failed  password length
    response = c.post('/register/', {
        'register-username': 'testuser2',
        'register-email': 'testuser2@email.com',
        'register-password': 'pass'
    })
    self.assertEqual(json.loads(response.content)['status'], 'fail')
    self.assertEqual(json.loads(response.content)['error_msg'], 'password must be atleast 8 characters long')

通常,您應該按邏輯拆分大測試,並遵循UnitOfWork_StateUnderTest_ExpectedBehavior測試方法的命名慣例

數據驅動測試的概念也是一個相關的想法,我過去親自使用過ddt ,然后切換到pytest參數化測試 -這是一種使用以下方法測試被測函數的相同特定“症狀”的好方法不同的輸入數據-這將有助於防止代碼重復( DRY原理 ),並使您的測試更具組織性和可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM