Как получить mongodb objectId из HTTP-ответа - PullRequest
0 голосов
/ 05 сентября 2018

Я тестирую конечную точку, которая сохраняет объект в базе данных. Почтовый метод работает, как задумано, и объект отправляется в базу данных. Я пытаюсь выяснить, как получить идентификатор объекта mongo из полученного HTTP-ответа, чтобы я мог проводить дополнительные тесты с помощью методов Put и Delete, так как мне нужен идентификатор объекта для URI.

@Test
public void saveRule() throws URISyntaxException, IOException {

    RuleDTO ruleDTO = new RuleDTO();
    ruleDTO.setTitle("My rule");
    ruleDTO.setIndex(666);

    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(ruleDTO);

    String target = "http://localhost:8090" + "/v2/rules"; // fix
    URI uri = new URI(target);
    HttpPost httpPost = new HttpPost(uri.toASCIIString());
    StringEntity entity = new StringEntity(json);
    httpPost.setHeader("Accept", "application/json");
    httpPost.setHeader("Content-type", "application/json");
    httpPost.setEntity(entity);
    HttpResponse response = httpClient.execute(httpPost);

    int HTTPcode = response.getStatusLine().getStatusCode();
    HttpEntity getEntity = response.getEntity();
    String getJson = EntityUtils.toString(getEntity);

    ObjectMapper objectMapper = new ObjectMapper();
    Rule rule = objectMapper.readValue(getJson, Rule.class);
    boolean isMyRule = false;

    if (rule.getTitle().equals("My rule")) {
        isMyRule = true;
    }

    boolean correctStatus = HTTPcode >= 200 && HTTPcode <= 300 ? true : false;

    assertTrue(correctStatus);
    assertTrue(isMyRule);
}

1 Ответ

0 голосов
/ 13 ноября 2018

Учитывая, что вы сказали, что тест предназначен для конечной точки, этот ответ предполагает, что он является сквозным, а не модульным тестом. Вот несколько вещей, которые вы можете попробовать:

  1. Обычно большинство API REST, отправляя запрос POST на добавление записи, возвращают ключ записи, которая была добавлена. Если у вас есть возможность изменить службу, возможно, вам следует подумать о добавлении этой функции в вашу службу, если она еще не добавлена. Затем в тесте нужно просто прочитать ключ из ответа на ваш запрос POST, а затем использовать его для выполнения запросов PUT и DELETE.
  2. Если метод (1) не является опцией, и если вы уверены, что можете извлечь только что добавленную запись на основе других полей записи, вы можете выполнить запрос GET для конечной точки. Затем выполняйте итерацию по полученным записям, пока не получите ключ (ObjectId в вашем случае) только что вставленной записи, и используйте его для выполнения запросов PUT и DELETE. Очевидно, что это сделает тест намного более медленным, особенно когда количество записей велико. Если есть конечные точки GET, которые фильтруют по полям, например, например, с использованием параметров запроса (например, /v2/rules?title="My rule"&index="666"), то это должно существенно ускорить выполнение теста и должно использоваться для запроса GET.
  3. Если вышеупомянутые два метода неосуществимы по какой-либо причине, и если возможен запрос Коллекции MongoDB с помощью тестов, то, вероятно, единственная оставленная вам опция (о которой я могу подумать прямо сейчас) - это подключиться к MongoDB через тест, а затем запросите документ, который вы только что вставили, получите ObjectId и используйте его для выполнения PUT amd DELETE запросов. Это, вероятно, будет самым неортодоксальным способом сделать это и не рекомендуется, если вы запускаете тест на реальной базе данных. Однако, если вы планируете запустить его в фиктивной базе данных (что, я не думаю, вы бы сделали, если бы это был сквозной тест, который вы пишете), то это все еще путь.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...