2010-06-14 4 views
2

직렬화 계층 생성기 개발을 계속하고 있습니다. 사용자는 유형 (현재 XSD 또는 WSDL에 있음)에 대한 설명을 입력하고 소프트웨어는 설명 된 유형을 나타낼 수 있고 또한 직렬화 할 수있는 특정 대상 언어 (현재 Java 및 ansi C89)로 코드를 생성합니다 byte-sequence로 바꾼다.) 그리고이 값들을 deserialize한다.빌드 프로세스에서 시스템 테스트 통합

코드를 생성하는 것이 어렵 기 때문에 (코드를 작성하는 것이 어렵습니다. 코드를 작성하는 코드는 어려운 일을하는 코드를 작성하는 것입니다. 따라서, 나의 석사 학위 논문 이전의 프로젝트에서, 우리는 우리가 적절한 시스템 테스트를 원한다고 결정했다.

이 시스템 테스트는 값 쌍과 바이트 순서의 유형 및 수를 알고 있습니다. 특정 언어로 시스템 테스트를 실행하기 위해 유형은 위에서 설명한대로 코드를 생성하는 시스템을 통해 실행됩니다. 그런 다음이 코드는 이러한 일련의 바이트 시퀀스와 값을 읽을 수있는 손으로 쓰는 호스트 코드와 연결되며 문자열에서 주어진 값의 값을 읽는 함수입니다. 그런 다음 결과 실행 파일이 실행되고 바이트 - 값 쌍이이 실행 파일에 제공되며 이러한 바인딩이 모두 "Y"출력이되는지 전체적으로 확인됩니다. 이 경우 유형에 대한 이러한 예제 값은 이전에 정의 된 바이트 시퀀스로 직렬화되므로 생성 된 코드가 올바르게 컴파일되어 실행될 수 있으므로 전반적으로이 유형을 처리하는 시스템 부분이 올바른 것으로 결론 내릴 수 있습니다. 이것은 아주 좋은 것입니다.

그러나 지금은 현재 구현에 조금 불만입니다. 현재 클래스 속성에서이 바이트 값 바인딩을 읽으려는 목적으로 꽤 많은 반사 마법을 사용하는 사용자 정의 junit 러너를 작성했습니다. 또한 코드를 생성하는 전체 스택에는 두 개 또는 세 개의 문자열을 포함하는 것보다 적은 양의 상용구 코드 및 상용구 클래스가 필요합니다. 더 나쁜 것은, Junits 디스크립션을 기반으로하고 테스트 실패 보고서를 생성하는 모든 툴과의 좋은 통합을 얻기 란 매우 어렵습니다. 도움이되는 maven Junit testrunner 또는 Eclipse 테스트 러너가 컴파일러가 던진 오류를 중얼 거 렸을 때 일어나는 일을 실제로 디버그하는 것은 매우 어렵습니다.이 오류의 형식이 junits 자체의 어설 션 오류와 다르기 때문입니다.

생성 된 코드에서 한 번 실패한 테스트로 인해 빌드가 실패합니다. 이것은 매우 성가신 일입니다. (예를 들어) 특정 깊이 첫 번째 선주문 계산이 어떤 이유로 실패하면 모든 것이 엉망이되어 버리기 때문에, 다른 단위에 대한 특정 테스트가 실패하면 Maven 빌드가 실패하는 것이 좋습니다. 그러나, 만약 내가 일하는 것을 알고있는 타입에 대해 생성 된 코드를 누군가에게 보여주고 싶다면, 내가 지금하고있는 타입이 끝나지 않았기 때문에, 빨리 어플리케이션을 만들 수 없다면 매우 짜증이납니다.

이 배경을 감안할 때 이러한 세대 사양을 확인하는 자동화 된 시스템을 어떻게 얻을 수 있습니까? 가능성 내가 가지고있는 합격점 :

  • 주자와 junit 및 junit의 통합을 향상시킬 수 없다면 Junit 통합 솔루션은 이상적이지 않습니다.
  • 우리는 이전에 fitnesse를 사용했지만 해결 된 것보다 더 많은 문제가 발생했기 때문에 전체적으로 버렸습니다. 우리가 가진 주요 이슈는 maven과 hudson으로의 통합이었습니다.
  • 텍스트 테스트를 사용하는 솔루션입니다. 왜냐하면 이것은 실행 파일이 stdin과 문자열을 stdout에서 기대하기를 원하기 때문입니다. 전체 "실행 응용 프로그램, 호스트 코드와 링크 된 다음 생성 된 실행 파일을 실행"을 추가하는 것은 다소 복잡해 보입니다.
  • 내 솔루션 작성. 이것은 물론 작동하고 내가 원하는 것을 할 것입니다. 그러나 이것은 평소처럼 시간이 많이 걸리는 작업이 될 것입니다.

그럼 ... 뭔가를 쓰지 않으려는 다른 방법이 있습니까?

답변

0

-Dmaven.test.skip = true를 사용하여 Maven을 실행할 수 있습니다. 넷빈즈는 명시 적으로 프로젝트를 테스트하기위한 명령 중 하나를 명중시키지 않으면 Eclipse를 자동으로 설정할 수있는 방법이 있습니다.