TDD 기능 테스트 내에서 테스트 격리

2019-07-20

기능 테스트 내에서 테스트 격리

현재 기능 테스트는 “실제” 데이터베이스를 사용하고 있다. 그러므로 테스트를 실행할 때마다 새로운 테스트 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_listlist_를 비교한것처럼 목록 개체를 서로 비교할 수 있다. 주 키(.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는 우선 여기까지…