2011-04-26 2 views
2

우리는 구형 Java VM, 특히 1.3 ME 용으로 작성된 (그리고 실행중인) 라이브러리가 있습니다.최신 VM 하에서 테스트 하네스가 실행되는 이전 Java VM을 대상으로 한 테스트 코드

라이브러리의 기능을 테스트하기 위해 1.6 VM에서 실행되는 '최신'테스트 도구를 사용하면 정확하지 않은 결과가 발생합니까?

VM간에 다른 클래스 (예 : IO) 로의 호출은 추상화되므로 테스트 하네스는 자체 구현 구현을 제공 할 수 있습니다. 이론적으로는 응용 프로그램 논리가 실행중인 플랫폼과 독립적으로 응용 프로그램 논리를 테스트 할 수 있습니다.

이 모델이 파괴되는 특정 영역이 있습니까? 아니면 다른 VM이 테스트에서 잘못된 결과를 초래할 수 있습니까? 라이브러리를 테스트 할 때 제네릭이나 현대 테스트 장치와 같은 것을 사용할 수있는 큰 장점이 있지만 테스트가 유효하지 않으면 무효화됩니다.

이유에 대한 설명 : 특정 VM (예 : Blackberry 및 Android 전화)이있는 기기에서 작동하는 코드를 작성하므로 가능하면 공통 API를 개발하고 코딩합니다. Java의 합리적인 공유 하위 집합을 코딩 할 수 있지만 테스트의 경우 강력한 테스트를 위해 더 나은 기능을 제공하는 VM에 대한 액세스 권한이있는 데스크톱에서 비즈니스 논리를 실행하십시오 (예 : EasyMock과 같은 프레임 워크).

답변

0

나는 훨씬 다른 환경에서 테스트를 권하고 싶지 않습니다. 그래도 대체 솔루션이 있습니다. Java 1.6을 사용하여 테스트 하네스를 작성하고 Retroweaver을 사용하여 호환 가능하도록 만드십시오. 그런 다음 실제 환경에서 사용되는 것처럼 1.3에서 테스트 환경을 실행하십시오. 제네릭과 현대 라이브러리를 사용할 수 있습니다. 그러나 Java 런타임의 기능을 1.3 이상으로 사용할 수는 없습니다. 아마도 라이브러리가 사용될 때와 동일한 환경을 테스트 할 수있는 합리적인 타협 일 것입니다.

+0

훌륭한 제안이며 조사할만한 가치가 있습니다. 질문에 '옳은'답변을 지정하기는 어렵지만 이는 타협안을 분명히 다룹니다. – AndyT

0

가능합니다.

저는 컴파일 타임 라이브러리가 클래스 버전 타겟이 아닌 1.3 JVM이라고 가정합니다. 그렇지 않으면 method/class/field-not-found 오류 등으로 끝날 수 있습니다.

일부 코드가 추상화가 아닌 구현에 기록 된 경우 버그가 발생할 수 있습니다. 즉, 개발자는 관찰 된 동작 인 ("시험해보고 작동했습니다")에 의존하며 1.3 설명서에 문서화 된 내용이 아닙니다.

더 오래된 런타임에는 최신 버전에없는 버그가 표시 될 수 있습니다. 해결 방법이있을 수 있지만 문제는 새로운 런타임에서 발견되지 않습니다.

0

저는 (기술적으로) Java 클래스의 응용 프로그램 논리를 새 단위의 VM에서 잘 테스트 할 것이라고 생각합니다. 그렇다고해서 언어 이점이 더 쉽게 사용할 수 있습니다.

비록 내가 이미 컴파일 된 클래스에 대한 테스트를 작성하는 것이 약간 이상하다고 생각합니다. 아마 오류를 발견하면 1.6에서 JUnit 테스트와 1.3을 반복적으로 교체하는 개발자에게는 1.3을 수정해야 할 것입니다.

이 경우 실제로 원하는 것은 기존의 VM에서 이전 클래스가 실행된다는 것을 증명하는 통합 테스트입니다. 그것이 나 였다면 단순화를 위해 모든 것을 1.3으로 유지할 것이지만 실제로는 테스트 클래스의 목적에 달려 있습니다. 언젠가 1.6으로 마이그레이션하려는 경우 최신 스타일의 테스트가 장기적으로 더 나을 것입니다.

죄송합니다. 결국 결론적 인 답변은 많지 않습니다! :)