2012-08-05 3 views
0

나는 4 개의 클래스 (파이썬)의 협력을 만들었습니다. 서브 클래스 동작을 테스트 하시겠습니까?

class A: 
    ## A, B, C are nested classes of A 
    class B: 
     ... 
    class C: 
     ... 
    class D: 
     ... 
    ## example methods 
    def newB(self): 
     return self.B() 
    def newC(self): 
     return self.C(self.newB()) 

나는 4 테스트의 경우 60 시험 방법을 작성하고이 노력했다.

B, C, D는 많은 동작을 제공하지 않으므로 A, B, C, D 클래스는 새로운 동작을 추가하기 위해 서브 클래 싱되어야합니다.

문제점 :

내가하는을 보장하기 위해 많은 테스트 코드를 작성, B, C는 바로 협력 D. A, B, C, D를 A2, B2, C2, D2로 하위 클래스 화하면 A, B, C, D를 테스트 한 것과 같은 방식으로 A2, B2, C2, D2의 동작을 테스트해야합니다.

어떻게해야합니까?

  1. 데이터베이스의 새 하위 클래스를 만들 때마다 모든 unittests를 하위 클래스로 만듭니다.
  2. 테스트 케이스와 스위트를 메소드로 생성 하시겠습니까?
  3. ...

어떤 서브 클래 싱 된 데이터베이스가 제대로 작동하고 실수가 거기에 없다는 것을 보장하기 위해 귀하의 사례가 될 것이다?

을 감안할 때 : unittests, 데이터베이스의 클래스와 하위 클래스 (들) 지금 존재

테스트 :

class A2(A): 
    ... 

:

class TestA(unittest.TestCase): 
    A = A 
    def setUp(self): 
     self.a = self.A() 
    def test_something(self): 
     ... 

class MockB(A.B): 
    ... 
class AWithMock(A): 
    B = MockB 
class TestAWithMock(TestA): 
    A = AWithMock 
    def setUp(self): 
     self.a = self.A() 
    def test_something_new(self): 
     ... 

class MockB2(A.B): 
    ... 
class MockC2(A.C): 
    ... 
class MockD2(A.D): 
    ... 
class TestWithMock(unittest.TestCase): 
    def test_b(self): 
     b = MockB2() 
     ... 
    def test_c(self): 
     ... 
    def test_d(self): 
     ... 
+1

숙제/나에게 할당 같은데 ... 그래도 난 틀렸다면 정정 해줘 ... –

+1

그렇지 않은 경우는, 언어는 어렵다 우리가 이해할 수 있도록 질문을 쓰는 데 몇 분 더 신경 쓰지 않을 수 있겠습니까? –

+0

잘못되었습니다. 그 형식은 제가 준 것입니다. 그러나 맞습니다 - 저는 집에서 이것을하고 있습니다. – User

답변

0
import unittest 
class TestCaseA(unittest.TestCase): 
    def setUp(self): 
     self.thing = A() 

    def test_does_x(): 
     self.assertTrue(self.thing.does_x()) 

지금 서브 클래스 A2를 정의 나는 당신의 테스트 케이스를 서브 클래스 화하지만, 단지 setUp/setupm을 오버라이드한다. 서브 클래스 A2의 나머지 API와 같은 형식은 A과 일치해야합니다.

그래서 테스트 서브 클래스는 단지 다음과 같습니다

class TestA2(TestCaseA): 
    def setUp(self): 
     self.thing = A2() 
+0

'TestWithMock'의 경우 어떻게 하시겠습니까? – User

+1

일부 코드를 보지 않고도 서브 클래스 'A'에 대한 모의 (mock)이 'A2'에도 적용되지 않는 이유는 없습니다. 물론'setUp' 메소드에서 모의 ​​객체를 설정할 수도 있습니다. 그래서 모의 객체는 각각의'TestCase'와 다를 수 있습니다. – stderr

+0

나는 또한 이렇게 할 것입니다. 다른 가능성도 있습니까? – User