[英]more pythonic way to test
Ok I'm writing tests for my Django app. 好的,我正在为我的Django应用程序编写测试。 I'm trying to figure out a way to iterate over the testing for a ajax register call for the appropriate responses.
我试图找出一种方法来迭代测试以获取适当响应的ajax注册调用。 It's working but I know it can be done in a more efficient way.
它正在工作,但我知道可以以更有效的方式完成它。
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')
Just separate your tests into separate methods. 只需将测试分成单独的方法即可。 Each of them will be triggered as long as they have prefix test_ , and each test can also run as a stand alone test.
只要它们具有前缀test_ ,它们就会被触发,并且每个测试也可以作为独立测试运行。 Use setUp and tearDown methods, if need to preset anything.
如果需要预设任何内容,请使用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')
In general, you should split the big test logically and follow the UnitOfWork_StateUnderTest_ExpectedBehavior
test method naming practice . 通常,您应该按逻辑拆分大测试,并遵循
UnitOfWork_StateUnderTest_ExpectedBehavior
测试方法的命名惯例 。
The concept of data-driven tests is also a relevant idea, I've personally used ddt
package in the past and then switched to pytest
parameterized tests - that is a great way to test the same specific "symptom" of a function under test using different input data - this would help to prevent code duplication ( DRY principle ) and make your tests more organized and readable. 数据驱动测试的概念也是一个相关的想法,我过去亲自使用过
ddt
包 ,然后切换到pytest
参数化测试 -这是一种使用以下方法测试被测函数的相同特定“症状”的好方法不同的输入数据-这将有助于防止代码重复( DRY原理 ),并使您的测试更具组织性和可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.