TDD 기능 테스트 내에서 테스트 격리
기능 테스트 내에서 테스트 격리
현재 기능 테스트는 “실제” 데이터베이스를 사용하고 있다. 그러므로 테스트를 실행할 때마다 새로운 테스트 DB를 생성하게 만들어야 한다. 그렇지 않으면 앞 테스트의 데이터가 DB에 남아 다음 테스트를 방해하게 된다.
기능 테스트를 기존 앱에 추가할 수도 있지만 별도로 관리하면 하나의 앱에 종속되지 않고 여러 앱에 적용할 수 있다.
필요한 경우에는 최소한의 설계를
개발 초기 단계에 요구사항 분석과 설계에 많은 시간을 할애하는 것이 전통적인 SW 공학인데, 이에 상반된 방법론이 Agile. Agile은 가능한 빨리 사용자가 Application을 접할 수 있도록 하는 것이 특징이다. 이를 이용해 얻은 실제 사용자 의견을 설계에 점진적으로 반영해 가는 방식이다.
하지만 설계를 하기 시작하면 생각을 멈추는 건 쉽지 않다. 오히려 끝내주는 아이디어로 만든 기능인것처럼 보여도 실제로는 사용하지 않을 수 있다. 사용자가 실제로 사용할지를 아는 것이 중요하다.
AssertionError: Regex didn’t match: ‘/lists/.+’ not found in
def test_can_start_a_list_and_retrieve_it_later(self):
...
inputbox.send_keys(Keys.ENTER)
time.sleep(1)
edith_list_url = self.browser.current_url
...
6장을 공부하다보면 다른 오류는 다 잡는데 이 오류는 계속해서 발생한다.
아래 출처에 따르면 비교하기전에 다른게 실행이 되서 발생하는 오류인것 같다.
그래서 모든 inputbox.send_keys(Keys.ENTER)
뒤에 time.sleep(1)
을 넣어주면 된다.
출처: https://lee-seul.github.io/test/django/2017/04/05/TDD-02-basic.html
꼬리 슬래시를 사용하지 않는 경우는 DB에 변경을 가하는 액션 URL인 경우다
def test_saving_and_retrieving_items(self):
list_ = List()
list_.save()
first_item = Item()
first_item.text = '첫 번째 아이템'
first_item.list = list_
first_item.save()
second_item = Item()
second_item.text = '두 번째 아이템'
second_item.list = list_
second_item.save()
saved_list = List.objects.first()
self.assertEqual(saved_list, list_)
saved_list
와 list_
를 비교한것처럼 목록 개체를 서로 비교할 수 있다. 주 키(.id)가 같은지 확인한다.
FAIL: test_saving_a_POST_request (lists.tests.NewListTest)
Traceback (most recent call last): File “C:\Users\pjs21\Desktop\TDD\superlists\lists\tests.py”, line 88, in test_saving_a_POST_request self.assertEqual(Item.objects.count(), 1) AssertionError: 0 != 1
from django.urls import reverse_lazy
class NewListTest(TestCase):
def test_saving_a_POST_request(self):
response = self.client.post(reverse_lazy('new_list'), {'item_text': '신규 작업 아이템'})
new_item = Item.objects.first()
self.assertEqual(Item.objects.count(), 1)
self.assertEqual(new_item.text, '신규 작업 아이템')
TDD는 우선 여기까지…