2010-03-27 6 views
3

나는 단위 테스트를하는 법을 배우는 중이다. 나는 Python/nose/Wing IDE에있다.nose로 파이썬 단위 테스트 : 순차 테스트하기

(나는에 대한 테스트를 쓰고 있어요 The project는 시뮬레이션 프레임 워크, 그리고 무엇보다도 당신이 모두 동기 및 비동기 적으로 시뮬레이션을 실행하고 시뮬레이션의 결과는 모두 동일해야합니다 수 있습니다.)

문제는 일부 테스트에서 다른 테스트에서 생성 된 시뮬레이션 결과를 사용하기를 원합니다. 예를 들어 synchronous_test은 동기 모드에서 특정 시뮬레이션을 계산하지만 비동기 모드로 계산하고 결과가 동일하게 나오는지 확인합니다.

구조는 어떻게 구성합니까? 하나의 테스트 기능에 모든 것을 넣거나 별도의 asynchronous_test을 만드시겠습니까? 테스트 기능에서 다른 기능으로 이러한 객체를 전달합니까?

또한이 모든 테스트는 테스트 생성기를 통해 실행되므로 내 프로그램에 포함 된 각 시뮬레이션 패키지에 대한 테스트를 수행 할 수 있습니다.

+0

테스트 할 특정 클래스를 지적 해 주시겠습니까? –

+0

bebraw, 나는 당신의 질문을 이해하지 못합니다. 'simulate'와'list_simulate' 함수와'Project' 클래스와 다른 것들을 테스트하고 싶습니다. –

+0

오케이. 프로젝트가 오픈 소스라고 생각하면 실제 코드를 읽는 것이 재미있을 것이라고 생각했습니다. :) –

답변

6

. 예 :

from nose.tools import * 
class Test_mysim(): 
    def setup(self): 
     self.ans = calculate_it_once() 

    def test_sync(self): 
     ans=calculate_it_sync() 
     assert_equal(ans,self.ans) 

    def test_async(self): 
     ans=calculate_it_async() 
     assert_equal(ans,self.ans) 
+0

'calculate_it_once()'가 실패하면 어떻게됩니까? –

+1

나는 당신이 (아마도 random.setseed() 등을 사용하여) '대답'을 알고 있다고 생각했다. 그렇지 않다면, 당신이 할 수있는 최선은 sync와 async가 동일하다는 것을 주장하는 것입니다, 그리고 * 그것은 테스트입니다. 나는 당신의 코드를 포크했지만, 나는 그것을 볼 기회를 얻지 못했다. –

6

일반적으로 이 아니라이 아닌 다른 테스트를 사용하는 것이 좋습니다. synchronous_test를 수행하고, asynchronous_test를 수행하고, 각각을 예상 된 올바른 출력과 비교하고 서로 비교하십시오.

그래서 같은 것을 : 당신은 그 클래스의 "설정"에 클래스 당 한 번만 계산해야 테스트를 추가 할 수 있습니다

class TestSimulate(TestCase): 
    def setup(self): 
     self.simpack = SimpackToTest() 
     self.initial_state = pickle.load("initial.state") 
     self.expected_state = pickle.load("known_good.state") 

    def test_simulate(self): 
     state = simulate(self.simpack, self.initial_state) 
     # assert_equal will require State to implement __eq__ in a meaningful 
     # way. If it doesn't, you'll want to define your own comparison 
     # function. 
     self.assert_equal(self.expected_state, state) 

    def test_other_simulate(self): 
     foo = OtherThing(self.simpack) 
     blah = foo.simulate(self.initial_state) 
     state = blah.state 
     self.assert_equal(self.expected_state, state) 
+0

그래서 * 예상되는 올바른 출력을 계산하려면? 이 출력의 계산은 자체 테스트를 받아야하기 때문에 –

+0

그리고 어떻게 * * 테스트합니까? 그것과 비교 ... 자체? 어딘가에서 좋은 결과물을 알고 있어야합니다. 피클에서 가져다 주시겠습니까? (코드로 업데이트 된 답변) – keturn

+0

나는 당신에게 요점이 있다고 생각합니다. 내가 피클에서 싣지는 않겠지 만 그렇게 쉽게 바꿀 수는 없다. 그레그 린드 (Gregg Lind)의 예와 같이 생각할 것입니다. 질문 : 많은 테스트를 하나의 연속 함수에 넣으면 나쁘다고 생각합니까? 그렇다면 이러한 것들에 대해 걱정할 필요가 없습니다. 그리고 한 가지가 실패하면 어쨌든 그것을 고쳐야 할 것입니다. –

관련 문제