Макет метода в другом методе в mockmvc - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в материалах MockMVC и junit, поэтому мне нужна помощь, поэтому ситуация в том, что мне нужно смоделировать метод, в то же время высмеивая внешний метод, который содержит метод. Например, метод калькулятора (int a, int b), я смоделирую этот метод с двумя фиктивными значениями, и в этом методе есть другой метод, который выполняет некоторые другие проверки (скажем, некоторые внешние проверки).

Я могу издеваться над калькулятором основного метода до точки, где вызывается этот внешний метод, я использовал «Given (). WillReturn ()» для насмешки над основным методом (калькулятором) и другим «Given ( ) .willReturn () "оператор для имитации содержащего метода (проверки одного), но это дает мне исключение nullPointer. Поэтому мне нужно что-то, что могло бы помочь мне в этом, чтобы издеваться можно было упорядоченно.

     public GuestRegistrationResponse registerGuest(SomeObject guestRegistrationRequest) throws Exception {

    SomeObject guestRegistrationResponse = new SomeObject();
    Folio folio = new Folio();

    folio.setForename(guestRegistrationRequest.getForename());
    folio.setEmail1(guestRegistrationRequest.getEmail());
    folio.setCity(guestRegistrationRequest.getCity());


    Result result = null;
    result = (Result) sampleAPICall.executeExternalAPI(result,new Class[] { SomeObject.class, User.class, Another.class, Folio.class, FolioList.class },
            Result.class);
    if (result != null && result.getFolioList() != null ) {
        guestRegistrationResponse.setFolioid(result.getFolioList().getFolio().getFolioId());

    } else {
        throw new ExternalException(result.getResult());
    }
    return guestRegistrationResponse;
}

Метод испытания

    @RunWith(SpringRunner.class)
 @WebMvcTest(value = ServiceImpl.class, secure = true)
 public class TestServiceImpl {

@Autowired
MockMvc mockmvc;

@InjectMocks
ServiceImpl serviceImpl;

@Before
public void setUp() {
    // We would need this line if we would not use MockitoJUnitRunner
    MockitoAnnotations.initMocks(this);
    // Initializes the JacksonTester
    JacksonTester.initFields(this, new ObjectMapper());
}

@Test
public void testRegisterGuest() throws Exception {

        SomeObject mockInput = new SomeObject();

        mockInput.setCity("CITY");
            mockInput.setEmail("test@test.com");
    mockInput.setForename("FORENAME");
    /* other datat is also collected*/
    ExpectedResponse mockOutput = new ExpectedResponse();
    mockOutput.setResult(true);

    Result Result = new Result();
    Result.setMessage("success");
    Result.setStatus(true);
    processTestThatMethod(mockInput, mockOutput,  Result);
}

private void processTestThatMethod(SomeObject mockInput, ExpectedResponse mockOutput,
         ,Result result) throws Exception {
    System.out.println("Inside processTestThatMethod");
     given(serviceImpl.registerGuest(mockInput)).willReturn(mockOutput);
         // what to do below ..
             given(sampleAPICall.executeExternalAPI(any(Result.class),any(new Class[]{SomeObject.class, User.class, Another.class, Folio.class, FolioList.class}),any(Result.class))).willReturn(result);

}
}

Отредактировал код @Sachin rai

1 Ответ

1 голос
/ 06 мая 2019
@Mock
    private class object;
    @Test
     public void testCalculator() {

      given(object.calculator(2,3)).willreturn(1);
      // remove the following line as when validate method will be called it will itself return true assuming it has simple check for positive value a and not calling any other method inside it
      given(class.validate(2)).willReturn(true); 
      //asserts here //
      }
...