2 서비스를 사용하는 ClassA
을 테스트하려고합니다. 하나의 서비스는 autowired가되어야하고 하나는 조롱 된 객체로 취급되어야합니다. 불행하게도 조롱 객체 내 테스트 클래스에 Autowiring 나머지 종속성 동안 @InjectMocks 작동하지 않습니다
입니다. 모든 필드는 스프링 자동 배선 기능을 사용하여 설정하는 것처럼 동작합니다. 테스트 된 ClassA는 다른 추상 클래스를 상속합니다. autowiring이 사용되지 않으면, 조롱 된 객체는 성공적으로 전달됩니다. 불행히도 나는 ServiceDao를 조롱 할 수 없다. 왜
@InjectMocks
과@Autowiring
주석을 결합하려고하는지.클래스 A.
public ClassA extends AbstractClassA<ClassOne, ClassTwo>{ @Autowired protected ServiceOne serviceOne; //this services needs to be mocked @Override protected List<ClassTwo> testedMethod(){ return serviceOne.getList(); //here method is not returning mocked objects } //as it supposed to do. ........ }
AbstractClass
public class AbstractClassA<T1 extends InterfaceOne, T2 extends InterfaceTwo){ @Autowired protected ServiceDAO serviceDAO; //this services needs to be autowired protected abstract List<T2> testedMethod(); }
의 TestClass. 이 경우
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:testApplicationContext.xml"}) public class Test { @Mock private ServiceOne serviceOne; //this mock object and it's return //objects are set properly @Autowired @InjectMocks private ClassA classA; //all fields are autowired, including the services that should be mocked @Before public void setData(){ Mockito.Annotations.initMocks(this); List<ClassTwo> result = Arrays.asList(new ClassA()); when(serviceOne.testedMethod().thenReturn(result); //here when i invoke mocked object it is returning correct list. } }
나는 다른 주입 시스템을 혼합하려고하지 않을 것이다. 대신 간단히 mocked bean을 만들고 Spring을 통해 주입하도록 Spring을 설정하십시오. –
u는 조롱 된 콩을 만드는 것에 대해 무슨 뜻입니까? 메서드가 호출 될 때 스프링 브랜이 sth를 반환하도록 어떻게 알 수 있습니까? – Dago
XML 설정, JavaConfig 등 무엇을 사용하고 있느냐에 달려 있습니다. 그러나 모든 경우에 Mockito (예 :)를 사용하여 모의 인 Bean을 만드는 테스트 구성을 만들 수 있습니다. 그런 다음 빈 자체를 테스트에 삽입하고 수행 할 작업을 지시 할 수 있습니다. –