스프링 부트:장치 테스트에서 클래스 경로에서 리소스를 읽는 방법
유닛 테스트에서 다음과 같은 classpath 파일을 읽으려고 합니다.
@Value("classpath:state.json")
Resource stateFile;
있습니다state.json
줄지어 들어가다src/test/resources
디렉토리로 이동합니다.이 파일을 읽으려고 할 때stateFile.getInputStream()
콘텐츠는 반환되지 않습니다.내가 뭘 잘못하고 있지?
나의 시험 수업은 이렇게 주석을 달았다.
@RunWith(SpringRunner.class)
@SpringBootTest
잘못된 파일로 시도하면 코드가 실패한다는 것을 알 수 있습니다.그래서 나는 classpath에서 파일을 보는데 어떤 이유에서인지 내용을 읽지 않는 것 같다.
난 이걸 우연히 만났어.메이븐을 쓰고 있어요.타겟/테스트 클래스 폴더를 확인했는데 리소스 파일이 없습니다(src/test/resources 폴더에 있었는데도).
나는 달렸다mvn clean install
대상/테스트 대상 폴더를 다시 확인하면 리소스 파일이 표시됩니다.그 후, 제 테스트는 파일을 찾을 수 있었고, 테스트는 성공했습니다.
따라서 리소스가 복사되지 않는 경우mvn clean
JUnit은 maven에 의해 구축된 클래스 경로를 찾고 있으며 파일이 실제로 타겟/테스트 클래스 폴더에 들어갈 때까지 JUnit은 찾을 수 없습니다.
속성이 정의되지 않은 경우 @Value 리소스에 액세스할 수 없습니다.이렇게 해야 돼.
@Value("${stateJsonPath}")
Resource stateFile;
하드코드된 경로에서 리소스를 가져와야 하는 경우 이 방법을 사용하십시오.
Resource stateFile = new ClassPathResource("state.json");
이것은 간단하게 동작합니다.경로는 현재 디렉토리를 나타내는 점으로 시작하는 것에 주의해 주세요.
@Test
public void testFile() {
String path = "./src/test/resources";
String fileName = "test.zip";
File file = new File(path, fileName);
assertTrue(file.exists());
}
후세를 위해 운용 중인 솔루션을 공유합니다.클래스 경로에 있는 파일은 다음 방법으로 읽을 수 있습니다.org.springframework.core.io.ResourceLoader
예를 들어, 저는 샘플 데이터 파일을 가지고 있습니다.posts.json
디렉토리 아래에src/test/java/resources/data
테스트 케이스 실행 중에 로드해야 합니다.@Before
@ActiveProfiles("test")
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SampleTest {
@Autowired
private ResourceLoader resourceLoader = null;
@BeforeEach
void init() {
File dataFile = resourceLoader.getResource("classpath:data/posts.json").getFile();
...
...
}
}
참고: 분류자를 사용할 경우 파일은 클래스 경로에 있어야 합니다.
언급URL : https://stackoverflow.com/questions/43428305/spring-boot-how-to-read-resource-from-classpath-in-unit-test
'sourcecode' 카테고리의 다른 글
Woocommerce REST API에서 범주별로 제품 가져오기 (0) | 2023.02.28 |
---|---|
woocommerce 커스텀 오더 상태를 추가하려면 어떻게 해야 하나요? (0) | 2023.02.28 |
형식 설명: 'react' 모듈을 찾을 수 없습니다. (0) | 2023.02.28 |
Angularjs는 거부 체인을 약속합니다. (0) | 2023.02.28 |
ng-click을 사용할 때 '새 탭에서 열기'를 허용하는 방법은 무엇입니까? (0) | 2023.02.28 |