자바 단위 테스트, 디렉토리 레이아웃
Java 코드에 대한 단위 테스트 모음을 빌드 할 때 소스 코드와 관련하여 테스트 코드를 배치 할 위치에 대한 규칙이 있습니까?
예를 들어, /java
여러 .java
소스 파일 이 포함 된 디렉토리 가있는 경우 테스트 케이스를 /java
자체에 넣거나 /java/test
.
후자가 선호되는 경우 클래스 의 private
/ protected
멤버를 패키지 외부에서 사용할 수 없을 때 코드의 내부를 어떻게 테스트 합니까?
소스 코드가 자체 디렉토리 루트에 있더라도 원본 클래스와 동일한 패키지에 테스트를 넣을 수 있습니다.
PROJECT_ROOT
+--- src/
+----test/
당신은 클래스 선언 할 수 있습니다 com.foo.MyClass
에서 src
그 테스트 com.foo.MyClassTest
아래를 test
.
비공개 멤버에 대한 액세스와 관련하여 리플렉션 을 사용 하여 메서드를 호출 Class.getDeclaredMethod.setAccessible
하거나 (를 통해 액세스 가능성을 변경 ) testng / junit5와 같은 것을 사용하여 소스 코드 자체에 주석 기반 테스트를 추가 할 수 있습니다 (개인적으로 이것이 나쁜 생각).
java.net
예를 들어 swinglabs (SVN 저장소가 꽤 느립니다) 와 같은 것들을 어떻게 구성했는지 확인하기 위해 일부 프로젝트 를 확인하는 것은 어떻습니까?
Apache Software Foundation의 표준 디렉토리 구조를 따르는 것이 좋습니다 .
module/
src/
main/
java/
test/
java/
이렇게하면 테스트가 소스와 별도로 유지되지만 디렉터리 구조에서 동일한 수준으로 유지됩니다. Apache가 구조를 정의하는 방법을 읽어 보면 리소스, 구성 파일, 기타 언어 등을 비롯한 다른 문제를 분할하는 데 도움이된다는 것을 알 수 있습니다.
또한이 구조를 사용하면 테스트 케이스를 테스트하는 것과 동일한 패키지에 배치한다고 가정하여 단위 테스트에서 테스트중인 단위의 패키지 및 보호 수준 메서드를 테스트 할 수 있습니다. 비공개 방법 테스트에 관해서는-신경 쓰지 않을 것입니다. 공개, 패키지 또는 보호 된 다른 어떤 것이이를 호출하고 이러한 것들을 테스트하는 전체 테스트 커버리지를 얻을 수 있어야합니다.
그런데 위의 링크는 Apache의 표준 빌드 도구 인 Maven입니다. 그들이 보유한 모든 Java 프로젝트는이 표준을 준수하며 Maven으로 빌드 된 모든 프로젝트를 만났습니다.
대부분의 경우 다음과 같이 수행됩니다.
<SOME_DIR>/project/src/com/foo/Application.java
<SOME_DIR>/project/test/com/foo/ApplicationTest.java
따라서 테스트가 동일한 패키지에 있으므로 패키지 / 보호 된 기능을 계속 테스트 할 수 있습니다.
클래스 내부에서 자체적으로 선언되지 않는 한 개인 정보를 테스트 할 수 없습니다.
배송시 .class
테스트가 아닌 src에 의해 생성 된 파일을 압축합니다.
실제로 프로덕션 및 테스트 프로젝트를 2 개의 개별 엔터티로 분리하는 것이 합리적이지만 두 프로젝트에서 동일한 패키지 구조를 사용합니다.
따라서 'my-project'프로젝트가있는 경우 'my-project-test'도 생성하므로 다음과 같은 디렉터리 구조가 있습니다.
my-project
+--- src/com/foo
my-project-test
+---test/com/foo
이 접근 방식은 테스트 코드 종속성이 프로덕션 코드를 오염시키지 않도록합니다.
개인적으로 패키지 비공개 및 보호 방법은 공개 방법뿐만 아니라 테스트해야합니다. 따라서 프로덕션 클래스와 동일한 패키지에있는 테스트 클래스를 원합니다.
이것이 우리가 설정하는 방법이며 우리는 그것을 좋아합니다.
build/
src/
test/build/
test/src/
모든 테스트 코드는 자체 빌드 디렉토리로 컴파일됩니다. 이는 실수로 프로덕션에 테스트 클래스가 포함되는 것을 원하지 않기 때문입니다.
Android Studio 에서 Java 라이브러리 모듈을 만들 때 다음과 같은 기본 클래스를 만듭니다.
[module]
+ src/main/java/[com/foo/bar]
[module].iml
파일 을 살펴보면 사용할 수있는 테스트 경로와 해당 경로를 찾을 수 있습니다. 다음은 요약입니다.
<module>
<component>
<content>
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
</content>
</component>
</module>
특히 할 수있는 일은 다음과 같은 구조를 갖는 테스트 용 디렉토리를 만드는 것입니다.
[module]
+ src/main/java/[com/foo/bar]
+ src/test/java/[com/foo/bar]
The above structure will be recognized by Android Studio and your files underneath will be included into the module.
I assume that that structure is a recommended layout for code and tests.
참고URL : https://stackoverflow.com/questions/1540324/java-unit-tests-directory-layout
'Program Tip' 카테고리의 다른 글
Android 스튜디오 오류 : Error : CreateProcess error = 216,이 버전의 % 1은 실행중인 Windows 버전과 호환되지 않습니다. (0) | 2020.10.28 |
---|---|
accepts_nested_attributes_for 하위 연결 유효성 검사 실패 (0) | 2020.10.28 |
모든 프로그래머가 알아야 할 .NET Framework 4의 사항 (0) | 2020.10.28 |
과학 컴퓨팅의 F # 성능 (0) | 2020.10.28 |
TabControl의 탭 페이지 활성화 (0) | 2020.10.28 |