@MockBeans 예제 사용
여러 서비스를 사용하는 컨트롤러 클래스가 있습니다.저는 다음과 같은 컨트롤러에 대한 테스트를 작성합니다.
@RunWith(SpringRunner.class)
@WebMvcTest(value = PurchaseController.class, secure = false)
public class PurchaseControllerTest {
@MockBean
private ShoppingService shoppingService;
@MockBean
private ShopRepository shopRepository;
@MockBean
private SomeOtherRepository someOtherRepository;
@Autowired
private MockMvc mockMvc;
// ... some tests goes here
문제는, 많은 가짜들이 있다는 것입니다. 코드 줄이 그렇게 많다는 것입니다.이게 코드 냄새의 징후일 수도 있다는 건 알지만, 지금은 그게 요점이 아닙니다.
나는 또한 그것이 있다는 것을 알아차렸습니다.@MockBeans
가 있는 주석@Target(ElementType.TYPE)
그래서 시도해 볼 수 있을 것 같았어요.
@RunWith(SpringRunner.class)
@WebMvcTest(value = PurchaseController.class, secure = false)
@MockBeans(value = {ShoppingService.class, ShopRepository.class})
public class PurchaseControllerTest {
하지만 컴파일은 하지 않습니다.
제 질문은: 어떻게 우리가@MockBeans
주석?제 경우에도 적용이 되나요?
@MockBeans
그것은 단지 곱셈에 대한 반복 가능한 주석일 뿐입니다.@MockBean
이 조롱된 빈을 재사용해야 할 경우 클래스/구성 클래스에 넣을 수 있습니다.하지만 당신은 사용해야 합니다.@Autowired
당신이 조롱해야 할 서비스를 위해. 그래서 당신의 경우에는 다음과 같아야 합니다.
.....
@MockBeans({@MockBean(ShoppingService.class), @MockBean(ShopRepository.class)})
public class PurchaseControllerTest {
@Autowired
ShoppingService shoppingService;
@Autowired
ShopRepository shopRepository;
.....
}
의 주요 아이디어@MockBeans
반복되는 것뿐입니다.@MockBean
한자리에나에게 있어서는 재사용할 수 있는 일부 구성/공통 클래스에만 유용할 수 있습니다.
@MockBean
모의실험을 만듭니다.@Autowired
컨텍스트에서 자동 배선된 빈입니다. 사용자의 경우 빈을 조롱된 것으로 표시/생성한 다음 조롱된 빈이 자동 배선된 필드에 주입됩니다.
따라서 자동 배선된 필드가 많은 경우@MockBeans
(또는 곱셈)@MockBean
모의인지 아닌지를 한 곳에서 구성할 수 있습니다.@MockBeans
수업 수준을 위해) 그리고 당신은 변화가 필요하지 않습니다.@Autowired
로.@Mock
당신의 시험 수업에서 (당신의 경우처럼 당신이 제거할 수 있습니다.@MockBeans
조롱당하지 않는 모든 자동 배선된 콩은 컨텍스트에서 콩으로 자동 배선되며, 제거를 취소하면 조롱당한 콩에서 작업하게 됩니다(이 주석 내부에서 구성한).
한 클래스 내에서 많은 종속성을 방지하려면 모든 종속성을 일부 상위 클래스로 추출할 수 있지만 Java가 클래스에 대한 다중 상속을 지원하지 않기 때문에 항상 도움이 되는 것은 아닙니다.
당신의 경우에 가장 짧은 변형은@MockBean
필요한 모크 클래스의 여러 값을 지원합니다.
@MockBean({ShoppingService.class, ShopRepository.class})
자바독은 그것이 다음과 같이 사용된다고 말합니다.
여러 {@link MockBean}개의 주석을 집계하는 컨테이너 주석입니다.
그래서 당신은 쓸 수 있습니다.
@MockBeans({@MockBean(ShoppingService.class), @MockBean(ShopRepository.class)})
public class PurchaseControllerTest {
@Autowire ShoppingService
여기서 작동합니다.
또는
반복 가능한 주석에 대한 Java 8의 지원과 함께 사용할 수도 있습니다.
@MockBean(ShoppingService.class)
@MockBean(ShopRepository.class)
public class PurchaseControllerTest {
Java 8은 반복 가능한 주석을 사용할 수 있으며 호환성을 위해 반복 주석이 컨테이너 주석에 저장됩니다.@MockBeans
Java 컴파일러에 의해 자동으로 생성됩니다.컴파일러가 이를 수행하려면 다음 두 가지가 필요합니다.
- 가능한 복반능가
@Repeatable(MockBeans.class)
유형 석주형@MockBean
- 유형 포함 석유 형함포
@MockBeans
언급URL : https://stackoverflow.com/questions/56132357/mockbeans-example-use
'programing' 카테고리의 다른 글
활성화 가능 여부구성 요소가 없는 경로로 자식을 활성화할 수 있음 (0) | 2023.07.26 |
---|---|
jquery를 사용하여 입력 유형을 가져오는 방법은 무엇입니까? (0) | 2023.07.26 |
ID에 대한 보기를 찾을 수 없는 Android 조각? (0) | 2023.07.26 |
어레이를 Json으로 변환 (0) | 2023.07.26 |
nan 값을 0으로 변환 (0) | 2023.07.26 |