Пружинная загрузка смоделированного объекта, возвращающего ноль при вызове - PullRequest
0 голосов
/ 08 мая 2018

Я использую @RunWith(SpringRunner.class) для написания модульного теста для макета объекта.Я пытаюсь смоделировать экземпляр репозитория, который принимает объект запроса и возвращает ответ, но в реализации модульного теста я смоделировал репозиторий с помощью аннотации @MockBean и зарегистрировал вызов метода it с помощью Mockito.when(respository.post(request)).thenReturn(response).Но этот звонок возвращается null.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Я столкнулся с подобной ситуацией, проблема в том, что параметр в блоке Mockito.when() может не совпадать с сгенерированным пружиной. Ниже я объясню мой случай, надеюсь помочь вам:

Product product = new Product(..);
Mockito.when(service.addProduct(product)).thenReturn(saveProduct)

Когда я отправляю запрос, Spring генерирует новый объект Project, который имеет те же поля с product, но экземпляр другой. То есть Mockito не может поймать оператор when. Я изменил это, как показано ниже, и это сработало:

Mockito.when(service.addProduct(Mockito.any())).thenReturrn(savedProduct)
0 голосов
/ 08 мая 2018

Я понял это. Но решение все еще странно для меня ...

Я столкнулся с этой проблемой, потому что я создавал экземпляры request и response в @Before аннотированном методе ... как описано ниже.

    @Before
public void setup() {
    Request reqA = new Request();
    reqA.set..(..);

    Response res = new Response();
    res.set..(..);

    Mockito.when(this.respository.post(reqA)).thenReturn(res);
}

@Test
public void test() {

    // Creating Request instance again with all same properties. 
    // Such that this req instance is technically similarly as instantiated in @Before annotated method (above). 
    // By, implementing the equals and hashCode method.
    Request reqB = new Request();
    reqB.set..(..);

    // Getting res as 'null' here....
    Response res = this.service.post(reqB);
}

Так как reqA и reqB технически схожи, то почему смоделированный вызов не возвращает тот же ответ, что и зарегистрированный.

Если я переместил setup() код метода внутрь test() метода, все начинает работать !!!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...