지금 "ok"테스트 슈트가 있지만 개선하고 싶습니다. 무슨 일이 일어날지는 사용자, 부동산, 학교 및 도시 개체 설정 (예를 들어 모델을 제한)을 반복해야한다는 것입니다. (: 때문에 예를 단순화하기 위해 변경으로 나눌 수 수 있지만 논리가 난 후 무엇을 참고) : 여기 Django Modular Testing
작동 내가 지금 가지고있는 무언가의 예입니다class MainTestSetup(TestCase):
def setUp(self):
self.manage_text = 'Manage'
User = get_user_model()
# set up all types of users to be used
self.staff_user = User.objects.create_user('staff_user', '[email protected]', 'testpassword')
self.staff_user.is_staff = True
self.staff_user.save()
self.user = User.objects.create_user('user', '[email protected]', 'testpassword')
self.city = City.objects.create(name="Test Town", state="TX")
self.school = School.objects.create(city=self.city, name="RE Test University",
long=-97.1234123, lat=45.78)
self.company = Company.objects.create(name="Test Company", default_school=self.school)
def login(self):
self.client.login(username=self.user.username,
password='testpassword')
def login_admin(self):
self.client.login(username=self.staff_user, password="testpassword")
class MainViewTests(MainTestSetup):
def test_home(self):
url = reverse('home-list')
manage_url = reverse('manage-property')
anon_response = self.client.get(url)
self.assertEqual(anon_response.status_code, 200)
self.assertNotContains(anon_response, self.manage_text)
self.login_admin()
admin_response = self.client.get(url)
self.assertContains(admin_response, self.manage_text)
def test_search(self):
url = reverse('search')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
...more tests
로 MainViewTest가 MainTestSetup 클래스에서 setUp 및 login 함수를 상속받는 것을 볼 수 있습니다. 이 작동하지만, 많은 애플 리케이션이 모든 모든 모델을 설정할 필요가 없습니다. 제가 시도한 것은 사용자, 학교, 회사와 같은 것들을 포함하는 믹스 인 세트를 필요한 TestSetups에만 설정하는 것입니다. 내 테스트 스위트에 대한 더 많은 유연성을 허용 할
class SchoolMixin(object):
def setUp(self):
self.city = City.objects.create(name="Test Town", state="TX")
self.school = School.objects.create(city=self.city, name="RE Test University",
long=-97.1234123, lat=45.78)
class CompanyMixin(SchoolMixin):
def setUp(self):
self.company = Company.objects.create(name="Test Company", default_school=self.school)
class UserMixin(object):
def setUp(self):
User = get_user_model()
# set up all types of users to be used
self.staff_user = User.objects.create_user('staff_user', '[email protected]', 'testpassword')
self.staff_user.is_staff = True
self.staff_user.save()
self.user = User.objects.create_user('user', '[email protected]', 'testpassword')
def login(self):
self.client.login(username=self.user.username,
password='testpassword')
def login_admin(self):
self.client.login(username=self.staff_user, password="testpassword")
class MainTestSetup(UserMixin, CompanyMixin, TestCase):
def setUp(self):
self.manage_text = 'Manage'
이 -이 단지 작은 예입니다
이 MainTestSetup 같은 무언가로 설정합니다. 다른 앱에서 필자에게 필요한 Mixins 만 포함시킬 수 있습니다. 예를 들어 회사가 필요하지 않은 경우 위의 예에서 SchoolMixin 만 포함합니다.
여기 내 문제는 setUp 함수의 상속과 관련이 있다고 생각합니다. 나는 올바르게 상속하는 방법을 잘 모르겠다. (슈퍼를 통해, 또는 다른 것을 통해서?). 나는 슈퍼를 사용해 보았지만 작동시키지 못했습니다. 나는 클래스/믹스 니스에 대해서는별로 좋지 않다는 것을 인정해야한다. 그래서 도움이나 조언을 많이 주시면 감사하겠습니다.
그것은 (물론, 지점) 효율적이거나 유연보다 더 간단한 단위 테스트를 유지하는 것이 더 중요 : 여기
는 공장을 사용하여 테스트의 전체 정말 간단한 예제 당신은 py.test fixtures (http://pytest.org/latest/fixture.html)와 비슷한 것을 성취하려고합니다. 장고와 함께 py.test를 사용하고 싶다면 pytest-django (http://pytest-django.readthedocs.org/en/latest/index.html)를 사용해 보시기 바랍니다. – thebjorn