옵션 처리는 Trade Federation의 모듈식 접근 방식의 중심에 있습니다. 특히 옵션은 개발자, 통합자와 테스트 실행자가 서로의 작업을 복제하지 않고도 함께 작업할 수 있게 해주는 메커니즘입니다. 간단히 말해 옵션 처리 구현은 개발자가 자바 클래스 멤버를 구성 가능한 것으로 표시하고, 이때 해당 멤버의 값을 통합자가 늘리거나 재정의하고, 이어서 테스트 실행자가 이를 늘리거나 재정의할 수 있게 해줍니다. 이 메커니즘은 모든 자바 고유 유형은 물론 고유 유형의 Map
또는 Collection
에도 작동합니다.
참고: 옵션 처리 메커니즘은 테스트 수명 주기에 포함된 인터페이스 중 하나를 구현하는 클래스에 대해서만 작동하며, 해당 클래스가 수명 주기 머신에 의해 인스턴스화된 경우에만 작동합니다.
개발자
우선 개발자는 멤버를 @Option
주석으로 표시합니다.
개발자는 최소 해당 옵션과 관련된 인수 이름을 지정하는 name
및 description
값, 그리고 명령어를 --help
또는 --help-all
로 실행하면 표시되는 설명을 지정합니다.
예를 들어 다양한 전화번호에 전화를 걸고, 연결된 후에 각 번호에서 DTMF 톤의 시퀀스를 수신할 것으로 예상하는 전화 기능 테스트를 빌드하고 싶다고 가정해 보겠습니다.
public class PhoneCallFuncTest extends IRemoteTest { @Option(name = "timeout", description = "How long to wait for connection, in millis") private long mWaitTime = 30 * 1000; // 30 seconds @Option(name = "call", description = "Key: Phone number to attempt. " + "Value: DTMF to expect. May be repeated.") private Map<String, String> mCalls = new HashMap<String, String>; public PhoneCallFuncTest() { mCalls.add("123-456-7890", "01134"); // default }
여기서 개발자는 해당 테스트와 관련된 구성의 두 지점만 설정하면 됩니다. 그런 다음에는 mWaitTime
및 mCalls
를 평상시처럼 사용할 수 있으며, 둘이 구성 가능하다는 사실에는 크게 주목할 필요가 없습니다. @Option
필드는 클래스가 인스턴스화된 이후, 하지만 run
메서드가 호출되기 전에 설정됩니다. 따라서 구현자는 어렵지 않게 Map
및 Collection
필드에 대한 기본값을 설정하거나 필터링을 수행할 수 있습니다. 이 경우가 아니라면 추가만 가능합니다.
통합자
통합자는 XML로 작성된 구성 환경에서 일합니다. config 형식은 통합자가 모든 @Option
필드에 값을 설정하거나 추가할 수 있게 해줍니다. 예를 들어 통합자가 기본 숫자를 호출하는 저지연 테스트와 다양한 숫자를 호출하는 길게 실행되는 테스트를 정의하고 싶어한다고 가정해 보겠습니다. 이 경우에는 다음과 같은 형식을 취할 수 있는 구성 쌍을 생성할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?> <configuration description="low-latency default test; low-latency.xml"> <test class="com.example.PhoneCallFuncTest"> <option name="timeout" value="5000" /> </test> </configuration>
<?xml version="1.0" encoding="utf-8"?> <configuration description="call a bunch of numbers; many-numbers.xml"> <test class="com.example.PhoneCallFuncTest"> <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" /> <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" /> <!-- ... --> </test> </configuration>
테스트 실행자
테스트 실행자 역시 Trade Federation 콘솔을 통해 이러한 구성 지점에 액세스할 수 있습니다.
가장 중요한 점은 테스트 실행자가 run command <name>
지침(줄여서 run <name>
)을 포함하는 명령어(즉, config 및 모든 관련 인수)를 실행한다는 것입니다.
더 나아가 테스트 실행자는 원하는 인수 목록을 명령어의 일부로 지정할 수도 있습니다. 이는 각 config 내의 수명 주기 개체에 의해 지정된 필드를 대체하거나 필드에 추가될 수 있습니다.
many-numbers
전화번호로 저지연 테스트를 실행하려는 경우 테스트 실행자는 다음을 실행할 수 있습니다.
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
아니면 반대 방향에서 유사한 효과를 얻으려면 테스트 실행자가 many-numbers
테스트의 대기 시간을 줄일 수 있습니다.
tf> run many-numbers.xml --timeout 5000
옵션 순서 지정
구현의 기본이 되는 call
옵션은 Map
입니다. 따라서 명령줄에서 반복되는 --call
은 저장됩니다.
long
의 기본 구현을 포함하는 옵션 timeout
은 하나의 값만 저장할 수 있습니다. 따라서 지정된 마지막 값만 저장됩니다.
--timeout 5 --timeout 10
은 10을 포함하는 timeout
으로 이어집니다.
List
또는 Collection
이 기본 구현인 경우에는 모든 값이 명령줄에 지정된 순서대로 저장됩니다.
부울 옵션
부울 기본 유형의 옵션은 옵션 이름(예: --[option-name]
)을 직접 전달하여 true
로 설정할 수 있으며 --no-[option-name]
구문을 사용하여 false
로 설정할 수 있습니다.