SpringBoot에서 콩을 추가하는 방법시험
그 질문은 매우 간단해 보이지만, 이상하게도 저는 해결책을 찾지 못했습니다.
제 질문은 콩을 추가/신고하는 것입니다.SpringBootTest
한 사람을 무시하거나 모키토를 사용하여 조롱하지 않습니다.
다음은 실제 요구사항을 가장 단순하게 구현하려고 시도했을 때 얻은 결과입니다(그러나 효과가 없습니다).
일부 서비스, 빈 및 구성:
@Value // lombok
public class MyService {
private String name;
}
@Value // lombok
public class MyClass {
private MyService monitoring;
}
@Configuration
public class SomeSpringConfig {
@Bean
public MyClass makeMyClass(MyService monitoring){
return new MyClass(monitoring);
}
}
테스트:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { SomeSpringConfig.class })
public class SomeSpringConfigTest {
private String testValue = "testServiceName";
// this bean is not used
@Bean
public MyService monitoringService(){ return new MyService(testValue); }
// thus this bean cannot be constructed using SomeSpringConfig
@Autowired
public MyClass myClass;
@Test
public void theTest(){
assert(myClass.getMonitoring().getName() == testValue);
}
}
이제, 제가 교체한다면,@Bean public MyService monitoring(){ ... }
타고@MockBean public MyService monitoring;
,그건 효과가 있다.저는 콩을 쉽게 조롱할 수 있지만 단순히 콩을 제공할 수 없다는 것이 이상하다고 생각합니다.
=> 그럼 한 번의 테스트를 위해 제가 직접 만든 콩을 어떻게 추가해야 할까요?
편집:
- ThreeDots의 답변(구성 테스트 클래스 만들기)이 일반적인 권장 사항이라고 생각합니다.
- 그러나 Danylo의 답변(@ContextConfiguration 사용)은 제가 질문한 내용에 더 잘 맞습니다. 즉, 테스트 클래스에 @Bean을 직접 추가합니다.
스프링 테스트는 사용 중인 구성(따라서 로드되는 콩을 스캔할 위치)을 알아야 합니다.원하는 것을 달성하기 위해 가장 기본적인 옵션은 다음 두 가지입니다.
빈을 포함하는 테스트 클래스 외부에 구성 클래스 만들기
@Configuration public class TestConfig { @Bean public MyService monitoringService() { return new MyService(); } }
그런 다음 에 추가하여 구성 클래스로 테스트합니다.@SpringBootTest(classes = { SomeSpringConfig.class, TestConfig.class })
또는
이 특정 테스트에서만 이 구성을 사용해야 하는 경우 정적 내부 클래스에서 정의할 수 있습니다.
public class SomeSpringConfigTest { @Configuration static class ContextConfiguration { @Bean public MyService monitoringService() { return new MyService(); } } }
스프링 부트 테스트를 통해 이를 자동으로 인식하고 로드합니다.
구성을 다음과 같이 추가합니다.
@ContextHierarchy({
@ContextConfiguration(classes = SomeSpringConfig.class)
})
이 경우에 제가 사용하는 것은@Import
:
@DataJpaTest(showSql = false)
//tests against the real data source defined in properties
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import(value = {PersistenceConfig.class, CustomDateTimeProvider.class})
class MessageRepositoryTest extends PostgresBaseTest {
....
여기서는 미리 구성된 "테스트 슬라이스"를 사용합니다.이 경우 JpaAuditingConfig를 추가해야 합니다.
하지만 당신이 당신에게 했던 것처럼 다른 콩들을 더하는 것이 어때요?SomeSpringConfig.class
?:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { SomeSpringConfig.class, OtherBean.class })
public class SomeSpringConfigTest {
...
테스트에 나열된 모든 항목은 직접 주입할 수 있으며, 모든 항목이 모의로 추가되어야 합니다.
언급URL : https://stackoverflow.com/questions/57772342/how-to-add-a-bean-in-springboottest
'programing' 카테고리의 다른 글
XMLHttpRequest.open()을(를) 재정의합니다. (0) | 2023.07.29 |
---|---|
미디어 쿼리가 화면 대신 div 요소를 기준으로 크기를 조정할 수 있습니까? (0) | 2023.07.29 |
"cdecl"은 무엇의 약자입니까? (0) | 2023.07.29 |
태그 지정을 위한 데이터베이스 설계 (0) | 2023.07.29 |
시스템 교체.Data.Oracle Client에서 Oracle로.데이터 액세스(ODP).NET) (0) | 2023.07.29 |