[Test] 테스트 주도 개발 (22 ~ 23장)

DaeHoon·2022년 11월 19일
0

TDD

목록 보기
6/9

22. 실패 처리하기

    def testFailedResultFormatting(self):
        result = TestResult()
        result.testStarted()
        result.testFailed()
        assert ("1 run, 1 failed" == result.summary())
  • 실패한 테스트를 추적하기 위해 위와 같은 테스트 코드를 작성해보자
class TestResult:
    def __init__(self):
        self.runCount = 0
        self.failureCount = 0

    def testStarted(self):
        self.runCount = self.runCount + 1

    def testFailed(self):
        self.failureCount = self.failureCount + 1

    def summary(self):
        return "%d run, %d failed" % (self.runCount, self.failureCount)
  • testFailed 메서드와 실패 카운트 필드인 failureCount를 정의한다.
  • summary도 하드코딩 되어 있는 부분인 failed을 failureCount를 보게 수정한다.
class TestCase:
    def __init__(self, name):
        self.name = name

    def setUp(self):
        pass

    def run(self):
        result = TestResult()
        result.testStarted()
        self.setUp()
        try:
            method = getattr(self, self.name)
            method()
        except:
            result.testFailed()
        self.tearDown()
        return result

    def tearDown(self):
        pass
  • 이후 try-except를 통해 메서드가 실행이 되지 않을 때 testFailed 메서드가 실행되게 예외처리를 해준다.

23. 얼마나 달콤한지

  • 테스트를 호출하는 부분에서 중복이 발생한다. 이 부분을 한 번에 실행하기 위해 TestSuite를 구현해보자.
    def testSuite(self):
      suite = TestSuite()
      suite.add(WasRun("testMethod"))
      suite.add(WasRun("testBrokenMethod"))
      result = suite.run()
      assert("2 run, 1 failed" == result.summary())
  • 테스트
class TestSuite:
    def __init__(self):
        self.tests = []

    def add(self, test):
        self.tests.append(test)

    def run(self, result):
        for test in self.tests:
            test.run(result)
  • TestSuite 정의.
  • run 메서드에서 하나의 TestResult 가 모든 테스트에 대해 쓰이길 바라기 때문에 다음과 같이 작성했다.
TestCase 
def run(self, result):
  result.testStarted()
  self.setUp()
  try:
    method = getattr(self, self.name)
    method()
  except:
    result.testFailed()
  self.tearDown()
  return result
  
  • testCase의 run도 result라는 매개변수를 받게 수정한다.
profile
평범한 백엔드 개발자

0개의 댓글