본문 바로가기

컴퓨터 프로그래밍/React.js

Django web application Test - Unittest , 프로그램 테스트의 의의

반응형

프로그램의 테스트 자동화의 의의

프로그래밍을 하다 보면 규모가 작은 프로젝트가 있는 반면 규모가 거대한 프로그램이 있기 마련이다.

규모가 커질수록 개발자가 직접 일일이 자신의 코드들을 테스트하는 것은 어려워진다.

테스트할 내용은 둘째치고 각 모듈, 컴포넌트 간의 상호작용이 복잡해지며 각 메소드 모듈 간에 영향을 끼치기 때문이다.

즉 한 쪽의 작은 수정으로 인해 다른 쪽에 영향을 주고 이를 발견하지 못한다면 더 큰 문제로 남게 될 것이다.

따라서 모든것이 잘 동작할 수 있도록 더 많은 수정이 필요해지고 이 수정이 새로운 에러를 유발하지 않도록 확인해야 한다.

*이에 대한 해결방법으로 각 메소드, 모듈 등에 대한 자동화된 테스트가 필요하다. *

 

테스트 또한 여러 가지 종류와 범위가 존재한다.

대표적으로 unit test, Regression tests , end to end test 등이 존재한다.

간단하게 unit test는 각 class 나 method 단위로 검사를 잘게 쪼개서 하는 테스트를 의미하며

Regression tests는 개발 도중 버그가 발견된 경우 해당 버그가 다시 발생하는지 테스트를 진행하는 것을 의미

end to end test는 최종 단계로 사용자의 입장에서 전반적인 시나리오 테스트를 진행한다.

 

이번 포스팅에서 다룰 주제는 Django를 이용해 만든 웹 애플리케이션을 어떻게 테스트 해야되나에 대한 고민들입니다.

그리고 테스트에 사용할 프레임워크는 unittest라는 프레임워크입니다.

unittest는 이름과는 다르게 단위 테스트부터 e2e까지 테스트하기에 적합합니다.

unittest를 이용해 리퀘스트를 테스트하고 테스트에 사용될 데이터를 삽입하고 만들어진 웹 어플리케이션의 결과물을 검사할 예정입니다.

테스트를 작성하기 위해 django의 클래스들을 가져오고, 해당 기능이 개발할 때의 기능대로 정상적으로 동작하는지 체크하는지 메소드를 작성합니다.

여기서 주의할 부분은 테스트할 때 원칙 중 하나는 원래 개발된 코드를 건들면 안 된다는 겁니다.

개발된 코드는 건들지 않고 해당 데이터를 테스트를 위해 만들어진 메소드에 넣고 예측되는 결과를 테스트합니다.

 

그럼 먼저 unittest에서 제공하는 기본 메소드부터 소개를 드리겠습니다.

unittest의 테스트 메소드는 클래스에서 정의된 set-up과 tesr-down방식을 통해 실행되고 마무리 되게 됩니다.

setup에서는 테스트에서 사용될 데이터들과 테스트에 계속해서 사용할 메소드들을 정의합니다.

그리고 teardown에서는 테스트 메소드가 마무리될 때 호출되며, 보통은 테스트 때 데이터베이스를 정리(삭제)합니다.

import unittest


class Mytest(unittest.TestCase):
    def test_something(self):
        print("something happended")
        self.assertEqual(self.fixture['something'], 'data')

    def setUp(self):
        print("Here is the place to set up test")
        self.fixture = {'something': 'datas'}

    def tearDown(self):
        print("Here is the place to finish up test")
        self.fixture = None

위의 코드 예시가 테스트 코드의 기본 뼈대인 셈입니다.

 

다음 포스팅에서는 웹 어플리케이션에서는 어떤 부분을 테스트해야되는가에 대한 부분을 포스팅 하겠습니다. 

반응형

'컴퓨터 프로그래밍 > React.js' 카테고리의 다른 글

Unittest - 초기 세팅 및 사용 방법  (0) 2020.10.25