Шаблоны объектов ответа в каратэ

Java имеет пул строк, в котором Java управляет распределением памяти для объектов String. См. String Pools в Java

Когда вы проверяете (сравниваете) два объекта с помощью оператора ==, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса, то он возвращает true, в противном случае false. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals.

equals - фактически метод класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.

Example:
    stringObjectOne.equals(stringObjectTwo);

Но помните, что это относится к случаю String. Если вы хотите сравнить регистр без учета регистра, вы должны пойти для метода equalsIgnoreCase класса String.

Давайте посмотрим:

String one   = "HELLO"; 
String two   = "HELLO"; 
String three = new String("HELLO"); 
String four  = "hello"; 

one == two;   // TRUE
one == three; // FALSE
one == four;  // FALSE

one.equals(two);            // TRUE
one.equals(three);          // TRUE
one.equals(four);           // FALSE
one.equalsIgnoreCase(four); // TRUE

1
задан Pebermynte Lars 13 July 2018 в 11:06
поделиться

1 ответ

Я не уверен, что понимаю, но позвольте мне попробовать. Если у вас есть JSON следующим образом:

* def json = { foo: 'bar', baz: 'ban' }

Вы можете использовать маркер #present следующим образом:

* match json == { foo: '#present', baz: '#present' }

Теперь, похоже, вы хотите динамически определять которые вы хотите:

* def keys = ['foo', 'baz']

Вы можете легко программно создать необходимый шаблон:

* def template = {}
* eval karate.forEach(keys, function(k){ template[k] = '#present' })
* match json == template

Надеюсь, что это поможет! Обратите внимание, что karate.forEach() является новым в 0.8.0 - и вы можете использовать 0.8.0.RC9 в среднем.

Если вы ссылаетесь на эти примеры, вы можете получить больше идей: https : //github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/search/search-complex.feature#L27

1
ответ дан Peter Thomas 17 August 2018 в 13:22
поделиться
  • 1
    Использование #present для соответствия присутствию поля / ключа сделало трюк. Не могли бы вы объяснить, как использовать #present для объектов ответа в корне? Тестирование при наличии клиник []. – Pebermynte Lars 13 July 2018 в 11:21
  • 2
    Выяснил это с небольшим количеством игр: * ответ ответа содержит {& quot; Клиники & quot; : #настоящее время }. Довольно проклятый удивительный инструмент! – Pebermynte Lars 13 July 2018 в 11:27
  • 3
    в предстоящем 0.8.0 вы сможете сделать * match response.Clinics == '#present' в качестве альтернативы, что предпочитают некоторые люди. – Peter Thomas 13 July 2018 в 12:52