Hamcrest AssetThat equalTo завершается ошибкой из-за символа Unicode "'\ u200E' 8206" в массиве значений объекта - PullRequest
0 голосов
/ 03 ноября 2019

Я использую Hamcrest для утверждения в моих тестах. Приведенный ниже фрагмент работает для других сравнений строк, однако приведенный ниже оператор не выполняется из-за некоторого случайного символа (?) На 0-м месте в массиве значений объекта, как показано на прилагаемом изображении ниже.

assertThat("failure, Publication did not match", book.getPublication(), is("Bloomsbury Publishing"));

Вот результат:

java.lang.AssertionError: failure, Publication did not match
Expected: is "Bloomsbury Publishing"
     but: was "‎Bloomsbury Publishing"
Expected :Bloomsbury Publishing
Actual   :‎Bloomsbury Publishing

Value array for object returned

Если это помогает, Book - это расширенная сущность JPA из сущности Product, в которой у продукта есть аннотация @Inheritance (стратегии = InheritanceType.JOINED).

Класс продукта

private long id;
private String prodName;
private BigDecimal price; 

Книга Класс

private String genre;
private String author;
private String publication;

В моих тестовых данных в data.sqlУ меня есть:

INSERT INTO PRODUCT(ID, PROD_NAME, PRICE) VALUES (1, 'Harry Potter', 200.55);
INSERT INTO PRODUCT(ID, PROD_NAME, PRICE) VALUES (2, 'Chhawa', 450.45);
INSERT INTO PRODUCT(ID, PROD_NAME, PRICE) VALUES (3, 'Chatrapati Shivaji Maharaj', 1000.00);
INSERT INTO PRODUCT(ID, PROD_NAME, PRICE) VALUES (4, 'Asa Mi Asami', 99.99);
INSERT INTO BOOK(ID, GENRE, AUTHOR, PUBLICATION) VALUES (1, 'Contemporary Fantasy', 'J. K. Rollings', '‎Bloomsbury Publishing');
INSERT INTO BOOK(ID, GENRE, AUTHOR, PUBLICATION) VALUES (2, 'Action', 'Shivaji Savant', 'Mehta Publishing House');
INSERT INTO BOOK(ID, GENRE, AUTHOR, PUBLICATION) VALUES (3, 'Action', 'Krishanrao Arjun Kelusakar', 'Saraswati Publishing Co.Pvt.Ltd');
INSERT INTO BOOK(ID, GENRE, AUTHOR, PUBLICATION) VALUES (4, 'Comedy', 'Pu La Deshpande', 'SANSKRUTI BOOK HOUSE');

И я расшифровываю json, возвращаемый @GetMapping(path = "/products/{id}"), например:

ResponseEntity<Book> response = restTemplate.exchange(
        productBaseUrl,
        HttpMethod.GET,
        null,
        Book.class);

Book book = response.getBody();

Таинственно, я получаю этот '\u200E' 8206 символ Unicode только для идентификатора= 1

Вот ссылка на всю базу кода: https://bitbucket.org/tyro_02/demo.cart/

1 Ответ

1 голос
/ 03 ноября 2019

8206, первый символ, является меткой Unicode слева направо:

8206 символов

Вы можете заменить символ поддержкой Java regex, используякласс символов:

"\\p{C}"

Соответствующие Java Regex

То есть, если вы считаете, что этот тест должен пройти PASS. Если вы думаете, что после вашего анализа, он должен потерпеть неудачу, то результат не сработает. Класс Book может возвращать String с разделенной пунктуацией Unicode в своем геттере getPublication(), используя регулярное выражение replaceAll, если вы можете изменить этот геттер.

См. Также управляющие символы Википедии U + 200E . (Кстати, сделал правку, это контрольный персонаж.)

...