2014-09-21 4 views
0

하드웨어 테스트에 사용되는 코 테스트 집합이 있습니다. 예를 들어, 아래의 테스트는 시스템에서 각 모드에 대한 경보를 테스트에 관한 것이다 :다른 테스트 대상에 대한 코 테스트 구성

import target 

modes = ("start","stop","restart","stage1","stage2") 
max_alarm_time = 10 

# generate tests for testing each mode 
def test_generator(): 
    for m in modes: 
     yield check_alarm, m, max_alarm_time 

# test alarm for a mode 
def check_alarm(m, max_alarm_time): 
    target.set_mode(m) 
    assert target.alarm() < max_alarm_time 

내 테스트의 대부분은 내가 시스템의 모든 modes에 대한 특정 기능을 테스트하고이 모양을 가지고있다. 내 테스트는 여전히 또한 기존의 하드웨어에 대한 작업 할 물론

modes = ("start","stop","restart","stage1","stage2","stage3","stage4") 

:

나는 이제 두 개의 추가 모드가 새로운 하드웨어를 테스트하는 테스트의 같은 세트를 사용하고 싶습니다. 자동화 된 테스트를 실행하려면 테스트 환경을 위해 연결된 하드웨어를 하드 코딩해야합니다. test_alarms.py와

def init(hardware): 
    global max_alarm_time 
    global modes 
    max_alarm_time = 10 
    if hardware == "old": 
     modes = ("start","stop","restart","stage1","stage2") 
    elif hardware == "new": 
     modes = ("start","stop","restart","stage1","stage2","stage3","stage4") 

지금 대신에 다음과 같이보고 :

나는이 작업을 수행하는 가장 좋은 방법은 다음과 같이 paramaters.py 모듈을 만드는 것입니다 생각에서 그런

import target 
import parameters 

# generate tests for testing each mode 
def test_generator(): 
    for m in parameters.modes: 
     yield check_alarm, m, parameters.max_alarm_time 

# test alarm for a mode 
def check_alarm(m, max_alarm_time): 
    target.set_mode(m) 
    assert target.alarm() < max_alarm_time 

내 main 나는 다음과 같은 것을 가지고있다 :

import nose 
import parameters 

parameters.init("new") 

nose.main() 

이것은 당신의 생각에 유효한 접근법인가?

답변

0

비슷한 문제를 해결하는 또 다른 방법은 다음과 같은 방법으로 플러그인 속성에서 @attr 장식을 남용하는 것입니다

from nose.plugins.attrib import attr 

max_alarm_time = 10 

# generate tests for testing each mode 
@attr(hardware='old') 
@attr(modes = ("start","stop","restart","stage1","stage2")) 
def test_generator_old(): 
    for m in test_generator_old.__dict__['modes']: 
     yield check_alarm, m, max_alarm_time 

@attr(hardware='new') 
@attr(modes = ("start","stop","restart","stage1","stage2", "stage3","stage4")) 
def test_generator_new(): 
    for m in test_generator_new.__dict__['modes']: 
     yield check_alarm, m, max_alarm_time 


# test alarm for a mode 
def check_alarm(m, max_alarm_time): 
    print "mode=", m 
당신은 바로이 같은 '구'와 '새로운'사이를 전환 할 수 있습니다

:

$ nosetests modes_test.py -a hardware=new -v 
modes_test.test_generator_new('start', 10) ... ok 
modes_test.test_generator_new('stop', 10) ... ok 
modes_test.test_generator_new('restart', 10) ... ok 
modes_test.test_generator_new('stage1', 10) ... ok 
modes_test.test_generator_new('stage2', 10) ... ok 
modes_test.test_generator_new('stage3', 10) ... ok 
modes_test.test_generator_new('stage4', 10) ... ok 

---------------------------------------------------------------------- 
Ran 7 tests in 0.020s 

OK 

그리고 이전 : $ nosetests는 -v = 오래된 -a 하드웨어를 modes_test.py

modes_test.test_generator_old('start', 10) ... ok 
modes_test.test_generator_old('stop', 10) ... ok 
modes_test.test_generator_old('restart', 10) ... ok 
modes_test.test_generator_old('stage1', 10) ... ok 
modes_test.test_generator_old('stage2', 10) ... ok 

---------------------------------------------------------------------- 
Ran 5 tests in 0.015s 

OK 

또한 놀지는 않았지만 nose-testconfig도 같은 트릭을 수행하는 데 도움이 될 수 있습니다.

+0

내 모든 테스트에서 내 모드를 사용하고 있으므로 한 곳에서 내 모드를 정의하는 것이 더 좋지 않습니까? 예를 들어 새 하드웨어에 대한 모드가 변경되면 모든 테스트를 변경하지 않고 한 곳에서 정의를 변경해야합니다. – Baz

+0

테스트/하드웨어 유형의 비율로 나옵니다. 나는 네가 한 일을 잘못 본 것이 없다. 네가 잘하는 한! – Oleksiy

관련 문제