[英]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.