/ / Schernire alcune chiamate e non deridere alcune chiamate nello stesso metodo di servizio primaverile - java, spring, junit, mockito

Prendere in giro alcune chiamate e non prendere in giro alcune chiamate nello stesso metodo di servizio primaverile - java, spring, junit, mockito

Devo scrivere un test per il mio spring servizio. Devo prendere in giro alcune chiamate nel mio metodo di servizio e alcune chiamate devono funzionare normalmente.

Significa, il mio metodo di servizio è

myInjectingService.submit()

all'interno di quel metodo in servizio ci sono le cose da prendere in giro

myMockService.createSomething(.....)
myMockService.verifyP(.)

Le cose non devono essere derise stanno salvando il valore nel database. Quindi, nel servizio, il repository verrà automaticamente avviato e lo salverà.

Il mio problema sta deridendo non sta funzionando. È possibile deridere qualcosa e non fare qualcosa insieme

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/context.xml" })
@WebAppConfiguration
@ActiveProfiles("test")
class Test {
@Mock
public MyMockService myMockService;

@Before
public void setUp() throws Throwable {
MockitoAnnotations.initMocks(this);
}

@InjectMocks
private MyInjectingService myInjectingService;

@Autowired private Repository1 repository1;
@Autowired private Repository2 repository2;

static {
System.setProperty("spring.profiles.active", "test");
}

private void saveTestData() {
//create entity objects
Entity1 e1 = new Entity1();
//set attributes

//create entity objects
Entity2 e2 = new Entity2();
//set attributes

//save entity objects
repository1.save(e1);
repository2.save(e2);
}

@Test
public void submitTest() {
saveData();

P p= new P();
Mockito.when(myMockService.createSomething(Mockito.any(),Mockito.any(),Mockito.any(),Mockito.any(),Mockito.any())).thenReturn(p);
Mockito.when(myMockService.verifyP(p)).thenReturn(1);

Response res = myInjectingService.submit();
assertNotNull(res);
}
}

risposte:

1 per risposta № 1

Puoi provare @Spiare e doCallRealMethod ()

@Spy
private Repository1 repository1;
@Before
public void setUp() throws Throwable {
MockitoAnnotations.initMocks(this);
}

Lo stubing sarà simile a questo:

doCallRealMethod().when(repository1).doSomething1(); //real method will be called
when(repository1.doSoemthing2()).thenReturn(somethingToReturn); //will return somethingToReturn

0 per risposta № 2

se questo è unit test allora non devi (oanche non dovrebbe) salvare i valori nel database. Quello che puoi fare invece è solo prendere in giro i repository in modo da "fare Niente" mentre si salva, ma può "fare Ritorno" quando viene usato il metodo "trova". La cosa qui è che devi testare una cosa alla volta - solo il metodo "MyInjectingService", prendere in giro le sue dipendenze e testarle in altri posti se necessario (evitare test per esempio repository spring, hibernate core ecc.).

Se hai davvero bisogno di un pessimo metodo per chiamare il metodo originale, controlla doCallRealMethod. Ma credo che non sia necessario nel tuo codice.