항상 응용 프로그램 수준 코드와 프레임 워크 수준 코드를 구분하려고하는 습관이 있으므로, 자주 설명하는 문제가 발생했습니다. 일반적으로 응용 프로그램 수준 코드를 테스트하기 전에 모든 프레임 워크 수준 코드를 테스트하기를 원합니다. . 또한 프레임 워크 수준 코드 내에서도 다른 모든 프레임 워크 모듈에서 사용하는 일부 기본 프레임 워크 모듈이있는 경향이 있으며, 기본 사항에 문제가있는 경우 실제로 다른 테스트는 필요하지 않습니다.
불행히도, 테스트 프레임 워크 공급 업체는 자신의 창작물이 어떻게 사용되어야하는지에 대해 다소 딱딱한 아이디어를 갖는 경향이 있으며, 이러한 아이디어를 보호하는 반면 프레임 워크를 사용하는 사람들은 의심없이 의도 된 사용법을 받아들이는 경향이 있습니다. 실험과 혁신을 방해하기 때문에 문제가됩니다. 나는 다른 모든 사람들에 대해 모른다. 그러나 나는 이상한 방식으로 무언가를 시도하는 자유를 선호하고, 자유를 가지지 않고 기존 방식보다 결과가 나아지는지 나 자신을 위해보고 싶다. 처음부터 내 방식대로 해
제 생각에는 테스트 종속성이 가장 좋을 것입니다. 그 대신에 테스트 실행 순서를 지정하는 기능이 차선책 일 것입니다.
테스트 순서 문제를 해결하는 유일한 방법은 테스트 프레임 워크가 알파벳 순서로 테스트를 실행하는 경향을 이용하기 위해 신중하게 이름을 지정하는 것입니다.
C #을 사용한 광범위한 테스트와 관련하여 아직 아무것도하지 않았기 때문에 Visual Studio에서 이것이 어떻게 작동하는지 알지 못하지만 전세계 Java 환경에서는 다음과 같이 작동합니다. 프로젝트의 소스 폴더에는 일반적으로 두 개의 하위 폴더가 있습니다. 하나는 프로덕션 코드를 포함하는 "main"이고 테스트 코드를 포함하는 "test"입니다. "main"아래에는 소스 코드의 패키지 계층 구조와 정확히 일치하는 폴더 계층 구조가 있습니다. Java 패키지는 대략 C # 네임 스페이스에 해당합니다. C #에서는 폴더 계층 구조를 네임 스페이스 계층 구조와 일치시킬 필요가 없지만 그렇게하는 것이 좋습니다.
이제 사람들이 Java 세계에서 일반적으로하는 일은 "test"폴더 아래에서 "main"폴더 아래에있는 폴더 계층 구조 를 미러링 하여 각 테스트가 테스트하는 클래스와 정확히 동일한 패키지에 있다는 것입니다. 이것의 근거는 테스트 클래스가 테스트중인 클래스의 패키지 개인 멤버에 액세스해야하기 때문에 테스트 클래스는 테스트중인 클래스와 동일한 패키지에 있어야한다는 것입니다. 세계의 C # 측면에는 네임 스페이스 로컬 가시성 같은 것이 없으므로 폴더 계층 구조를 미러링 할 이유가 없지만 C # 프로그래머는 폴더를 구성 할 때 동일한 원칙을 따르지 않습니다.
어쨌든, 테스트 클래스가 구현이 아닌 인터페이스를 테스트하는 경향이 있기 때문에 테스트 클래스가 테스트중인 클래스의 패키지 로컬 멤버에 액세스 할 수있게한다는이 모든 아이디어를 발견했습니다. 따라서 테스트의 폴더 계층 구조는 프로덕션 코드의 폴더 계층 구조를 미러링하지 않아도됩니다.
그래서 내가하는 일은 테스트 폴더 (의미, 패키지)의 이름을 다음과 같이 지정하는 것입니다.
t001_SomeSubsystem
t002_SomeOtherSubsystem
t003_AndYetAnotherSubsystem
...
이렇게하면 "SomeSubsystem"에 대한 모든 테스트가 "SomeOtherSubsystem"에 대한 모든 테스트 전에 실행되며, "AndYetAnotherSubsystem"등에 대한 모든 테스트 전에 실행됩니다.
폴더 내에서 개별 테스트 파일의 이름은 다음과 같습니다.
T001_ThisTest.java
T002_ThatTest.java
T003_TheOtherTest.java
물론 최신 IDE에는 몇 번의 클릭과 키 입력만으로 전체 패키지 (및 모든 하위 패키지 및 해당 패키지를 참조하는 모든 코드)의 이름을 바꿀 수있는 강력한 리팩토링 기능이 있습니다.