ich eine Klasse A haben dieWie @InjectMocks verwenden zusammen mit @Autowired Annotation in Junit
public class A() {
@Autowired
private B b;
@Autowired
private C c;
@Autowired
private D d;
}
Beim Testen sie mit autowiring 3 differnt Klassen verwendet, würde ich nur 2 der Klassen haben möchte (B & C) als Mocks und haben Klasse D Autowired als normaler Lauf werden, dieser Code funktioniert nicht für mich:
@RunWith(MockitoJUnitRunner.class)
public class aTest() {
@InjectMocks
private A a;
@Mock
private B b;
@Mock
private C c;
@Autowired
private D d;
}
ist es überhaupt möglich, dies zu tun?
Gibt es eine Möglichkeit, @RunWith (MockitoJUnitRunner.class) weiter zu verwenden und dieses Problem zu lösen? Der obige Code ist nur ein Teil der größeren Test-Klasse, und ich kann nicht ändern, wie wir junits laufen – USer22999299
Ja können Sie, aber Sie können nicht 'Autowired' in diesem Fall verwenden, dann müssen Sie manuell Code initialisieren Feder Kontext laden die Instanz von 'A' –
Es gibt einen Fall, in dem dieser Ansatz nicht funktioniert: wenn' A' mit '@Transactional' versehen ist (oder Methoden mit' @Transactional' versehen sind); siehe http://stackoverflow.com/questions/12857981/transactional-annota-avoids-services-being-mocked und http://stackoverflow.com/questions/21124326/how-to-inject-mock-into-service-that -has-transactional –