java playframework - Clover on a Play를 사용하여 코드 적용 범위를 수행하십시오! Ant를 사용한 프레임 워크 응용 프로그램




compile eclipse (2)

Play에서 몇 가지 추가 검사 를 수행하는 Ant 스크립트를 작성 중입니다! 프레임 워크 응용 프로그램.

현재 앤트 스크립트에서 "play auto-test"라는 exec 호출만으로 테스트를 수행하고 있습니다.

    <exec executable="${play.dir}/play.bat">
        <arg line="auto-test"/>
    </exec>

누구나 Clover를 Play 테스트 스위트에 통합하는 방법을 알고 있습니까? 분명히 위의 방법을 사용하여 테스트를 실행하지 않아도됩니다.

나는 또한 JUnit 테스트를 실행하는 전통적인 방법 (Ant의 junit 타겟 사용)을 사용하여 Ant 스크립트를 작성하려고 시도했다. 두 가지 문제가있다.

  • 모든 테스트를 실행할 때 첫 번째 테스트 만 성공적으로 실행되지만 다른 테스트는 이상한 이유로 실패합니다.
  • 스위트에 하나의 테스트 만 노출하고 테스트를 성공적으로 실행하면 코드 커버리지가 0 %라고합니다. 그런 다음 클로버를 잘못 설정했다고 생각했지만, 아무것도하지 않은 프로덕션 클래스를 테스트 한 간단한 클래스를 만들었습니다. 기대했던대로 범위가 올라갔습니다.

그래서 junit 루트를 내려야한다면, 모든 테스트를 실행하여 성공적으로 하나씩 실행할 수 있어야합니다 ( play auto-test 를 실행하는 Play 방식을 사용할 때 작동 함). Clover가 Play 테스트에서 다루어 진 코드 라인을 선택하지 않는 이유를 알고 싶습니다.

(나는 놀이를위한 Cobertura 모듈이 있다는 것을 알고 있지만, 클로버는 나에게 정확한 범위 그림을 말하는 더 나은 직업을 찾는다)

업데이트 : 불행히도 필자가 수동으로 컴파일하고 컴파일 할 때 컴파일 문제가 발생하여 정확한 오류를 복제 할 수 없습니다. Secure 모듈을 사용하기 시작했으며 자바 소스 파일 만 포함합니다. 그래서 앤트 스크립트에서, 보안 모듈 (내 코드를 포함하여 시스템의 다른 모든 것들)의 바이트 코드를 생성하는 play precompile 을 호출 play precompile . 그래서 이제 Clover를 사용하여 애플리케이션 코드를 컴파일하고 컴파일 할 때, 컴파일러는 프리 컴파일 명령 (non-clover)에 의해 생성 된 클래스와 내 자신에 의해 생성 된 클래스의 두 버전을 가지고 있기 때문에 약간의 복잡함이 따른다 고 생각합니다. 개미 컴파일 (클로버 포함) :

[javac] C:\projects\testproject\out\clover\classes\clover8583527041716431332.tmp\model\HouseTest.java:45: incompatible types
[javac] found   : play.db.jpa.JPABase
[javac] required: models.House
[javac]         __CLR2_5_115y15ygoxiz3dv.R.inc(1527);House found = House.findById(id);

그래서 본질적으로 두 가지 문제가 있습니다.

  • 컴파일 된 버전을 가지고 있지 않은 Play 제공 모듈 (예 : CRUD, Secure)에 의존하는 내 소스 코드를 컴파일 할 수 있어야합니다. 따라서 Ant Ant 스크립트에서 play precompile 호출을 통해이를 해결하려고 시도했습니다.
  • 컴파일 작업이 완료되면 junit 타겟을 사용하여 테스트를 수행 할 수 없다는 사실을 다시 한 번 확인하게 될 것입니다.

업데이트 # 2 : findById 호출에서 JPABase에서 House 로의 캐스트가 필요했기 때문에 오류가 발생 했음이 밝혀졌습니다 (IDE 나 재생이 걱정하지 않는 것 같음). 그래서 내가 들어 와서 연극의 모든 "찾기 *"방법에 대한 캐스트를 넣은 후에, 실제로 JUnit과 Clover 보고서를 받았습니다! 그러나 ... 지금 두 가지 종류의 오류가 발생합니다.

  • Play에서 생성 된 엔티티 클래스는 앞에서 언급 한 메서드 findcount 메서드와 같은 마법 메서드를 제공하는 Model 클래스를 확장하여 만들 수 있습니다. 모델 수퍼 클래스는 실제로 UnsupportedOperationException을 throw하여 이러한 메소드를 구현하는 GenericModel을 확장합니다. 그래서 분명히 플레이! 이 메서드의 실제 구현을 제공하기 위해 더 많은 마법을 사용합니다. 불행히도, 내 테스트 (및 프로덕션 코드)는 개수와 같은 메서드에 의존하지만 ant / junit 시나리오에서 예외를 던지고 있습니다 (참고 : play auto-test 실행하면 모든 것이 잘 작동합니다).

  • 다른 오류는 Spring 모듈을 사용하고 있기 때문에 발생합니다. 내 수업 중 하나 (루트 클래스)에서 나는 Spring.getBeanOfType(Some.class) 호출 Spring.getBeanOfType(Some.class) . 이제 자동 스캔을 사용하지만 ant / junit 테스트 환경에서 Spring 모듈은 아직 스프링 컨테이너를 설정하지 않았으므로 호출은 null을 반환합니다.

나는 두 가지 문제점을 해결할 수있는 하나의 마법 수정이 있다고 생각하지만, 그 마법 수정이 무엇인지 확신 할 수 없다.


Answers

Clover는 소스 레벨 계측을 수행하므로 소스 코드가 필요합니다. 바이트 코드를 생성하는 클로버를 활성화하기 전에 수행하는 모든 작업이 "Clovered"되지 않습니다.

개미용 클로버는 개미 컴파일러 호출을 가로 채므로 개미 스크립트에서 다른 컴파일 작업을 수행하기 전에 <clover-setup/> 을 수행하면 모든 것이 클로버에 의해 인스트루먼트되어야합니다.

컴파일 된 코드를 원하는 방식으로 실행할 수 있습니다 (예 : 스크립트 또는 junit에서 실행). 코드가 인스트루먼트 된 경우 (물론 클래스 패스에서 clover.jar을 사용할 수있는 경우) 중요합니다. 클로버는 클로버 데이터베이스의 위치를 ​​계측 코드로 하드 ​​코딩하므로 실행시 아무 것도 지정하지 않아도됩니다.

클로버를 사용하는 방법을 대략적으로 설명 할 수 있다면 정말 도움이 될 것입니다. 또한 http://confluence.atlassian.com/display/CLOVER/1.+QuickStart+Guide 클로버 문서에서 다시 검사 할 수도 있습니다.


Java에서 기본 유형에 대해 살펴볼 수 있습니다.

이러한 유형 간의 주요 관심사는 메모리 사용입니다. 예를 들어 int 는 32 비트를 사용하고 바이트 는 8 비트 만 사용합니다.

대규모 구조 (배열, 행렬 등)에서 작업한다고 가정하면 메모리 사용을 줄이기 위해 사용하는 유형을보다 잘 관리 할 수 ​​있습니다.







java build playframework clover