Frühjahr Mockito @injectmocks nicht funktioniert
Hallo, ich bin mit Mockito testen, mein Frühlings-Projekt, aber die @InjectMocks
scheint nicht in der Injektion einer verspottet Leistungen in einem anderen Frühling service(bean).
Hier ist meine Frühlings-Dienst, den ich testen möchte:
@Service
public class CreateMailboxService {
@Autowired UserInfoService mUserInfoService; //this should be mocked
@Autowired LogicService mLogicService; //this should be autowired by Spring
public void createMailbox() {
//do mething
System.out.println("test 2: " + mUserInfoService.getData());
}
}
Und unten ist der service, den ich will, zu verspotten:
@Service
public class UserInfoService {
public String getData() {
return "original text";
}
}
Mein test code ist hier:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class CreateMailboxServiceMockTest {
@Mock
UserInfoService mUserInfoService;
@InjectMocks
@Autowired
CreateMailboxService mCreateMailboxService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void deleteWithPermission() {
when(mUserInfoService.getData()).thenReturn("mocked text");
System.out.println("test 1: " + mUserInfoService.getData());
mCreateMailboxService.createMailbox();
}
}
aber das Ergebnis möchte
test 1: mocked text
test 2: original text //I want this be "mocked text", too
scheint es, dass die CreateMailboxService nicht die verspottet UserInfoService aber mit Frühling ist autowired bean.
Warum ist mein @InjectMocks
funktioniert nicht?
Hinsichtlich
- Ich glaube, Sie brauchen MockitoJunitRunner.class wenn Sie versuchen, um Sie zu verhöhnen. Auch bei der() stub, mock die Funktion, die Sie für mUserInfoService.
- Registrieren Sie den mock-als spring-bean. Sie wird jetzt nur die bean aus dem context und es wird nicht spotten, irgendetwas (wie Sie sehen).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen
package
level-Set-Methode fürmUserInfoService
imCreateMailboxService
Klasse.Dann können Sie Spritzen, die mock in den test mithilfe der setter.
Diese Weise können Sie vermeiden Probleme mit
@InjectMocks
- und Spring-Annotationen.Für diejenigen, die stolpert über diesen thread und ausführen mit JUnit 5 Sie brauchen, um zu ersetzen
@RunWith(SpringJUnit4ClassRunner.class)
mit
@ExtendWith(MockitoExtension.class)
@RunWith(JUnitPlatform.class)
Weiter Lesen hier https://www.baeldung.com/mockito-junit-5-extension. Leider gibt es keinen Hinweis, bei der Ausführung der Testfälle mit junit 5 mit der alten annotation.
gibt es keine Notwendigkeit der @Autowired-annotation, wenn Sie Spritzen in der test-Klasse. Und verwenden Sie die mock für die Methode, um Ihr verspottet Antwort als die Weise hast du für UserInfoService.Das wird etwas sein wie unten.
Mockito.wenn(mCreateMailboxService. getData()).thenReturn("meine Antwort");