Тестирование простого REST с помощью TJWSEmbeddedJaxrsServer + Mocktio: не воспроизводимый результат теста - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь протестировать простой API отдыха с включенным фиктивным сервисом.

Редактировать: я пытался скопировать учебник здесь: https://dzone.com/articles/how-test-rest-api-junit

Если я запускаю тест несколько раз подряд, возможны два результата:

  1. Тест выполняется нормально, и все в порядке.
  2. Тест не пройден, поскольку ответ 204 - Нет содержимого.Похоже, что смоделированный GWYServiceBean не возвращает объект, как предполагалось.Это приводит к неправильному и пустому ответу.Я не могу понять, где проблема.Может быть, один из вас может помочь мне здесь.

Служба REST

@Inject
GWYServiceBean gwyServiceBean; // Should be mocked during the test

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public GWYDevice addDevice(GWYDevice gwyDevice) {
    return gwyServiceBean.add(gwyDevice);
}

Модульный тест с Mockito / TJWSEmbeddedJaxrsServer

@RunWith(MockitoJUnitRunner.class)
public class GWYResourceTest {

@InjectMocks
private GWYResource sut = new GWYResource();
@Mock
private GWYServiceBean gwyServiceBeanMock;

private TJWSEmbeddedJaxrsServer server;
private ResteasyClient client;

@Before
public void setUp() {
    server = new TJWSEmbeddedJaxrsServer();
    server.getDeployment().getResources().add(sut);
    server.setPort(12345);
    server.start();
    client = new ResteasyClientBuilder().build();
}

@After
public void cleanUp() {
    client.close();
}

@Test
public void post() throws InterruptedException, ExecutionException {
    // Given
    String systemCode = "11111";
    String unitCode = "10000";
    long id = 1l;

    GWYDevice gwyDevice = new GWYDevice();
    gwyDevice.setSystemCode(systemCode);
    gwyDevice.setUnitCode(unitCode);

    GWYDevice persistedGwyDevice = new GWYDevice();
    persistedGwyDevice.setSystemCode(systemCode);
    persistedGwyDevice.setUnitCode(unitCode);
    persistedGwyDevice.setId(id);

    when(gwyServiceBeanMock.add(Mockito.any(GWYDevice.class))).thenReturn(persistedGwyDevice);

    // When
    Entity<GWYDevice> entity = Entity.json(gwyDevice);
    Response response = client.target("http://localhost:12345/gwy").request().post(entity);

    // Then
    assertTrue(response.getStatus() == OK.getStatusCode());
    GWYDevice returnedGwyDevice = response.readEntity(GWYDevice.class);
    assertNotNull(returnedGwyDevice.getId());
    assertEquals(gwyDevice.getSystemCode(), returnedGwyDevice.getSystemCode());
    assertEquals(gwyDevice.getUnitCode(), returnedGwyDevice.getUnitCode());
}
...