2013-07-15 31 views
14

im, просто переходя от C# -> java. Мне нужно написать несколько тестов с помощью junit. В моем тесте мне нужно сравнить две строки, чтобы увидеть, совпадают ли они. Итак, у нас также есть Assert.assertEquals, но это чувствительно к регистру. Как я могу сделать регистр нечувствительным к регистру? Что мне нужно, это:junit assertEquals игнорировать регистр

"blabla".equals("BlabLA") 

вернуть истинный.

Таким образом, в C#, мы использовали, чтобы:

public static void AreEqual (
    string expected, 
    string actual, 
    bool ignoreCase, 
    string message 
) 

Я быстро идти через JUnit документы, но я не могу найти ничего подобного.

ответ

15

Я нахожу, что Hamcrest обеспечивает более надежные утверждения, чем заявляет по умолчанию JUnit. Hamcrest дает МНОГИЕ МНОГИЕ варианты и предоставляет более качественные сообщения о неудаче. Некоторые базовые Hamcrest соединители встроены в JUnit, а JUnit имеет встроенный assertThat, так что это не что-то совершенно новое. См. Пакет hamcrest.core в JUnit API here. Попробуйте IsEqualIgnoringCase, который будет выглядеть следующим образом.

assertThat(myString, IsEqualIgnoringCase.equalToIgnoringCase(expected)); 

С статический импорт это будет

assertThat(myString, equalToIgnoringCase(expected)); 

, если вы хотите получить действительно фантазии вы могли бы сделать:

assertThat(myString, is(equalToIgnoringCase(expected))); 

Одним из преимуществ этого является то, что отказ будет утверждать это expected someString but was someOtherString. В отличие от expected true got false при использовании assertTrue.

+0

Sry, я очень новичок в java, любая подсказка, почему я получаю это? Кажется, правильно импорт .. 1) AddNewTrip (PikoFuncTests.Tests.Trip.AddNewTripTest) java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch (Ljava/языки/объекта; Lorg/Hamcrest/Описание;) V \t на org.hamcrest.MatcherAssert.assertThat (MatcherAssert.java:18) \t на org.hamcrest.MatcherAssert.assertThat (MatcherAssert.java:8) \t в PikoFuncTests.PageObjects.MainView.Trip.TripMainView.ValidateResultsTable (TripMainView .java: 147) –

+1

Обычно это происходит, когда вы импортировали 2 разных версии Hamcrest. Есть один, который включен в JUnit, поэтому, если вы включили hamcrest-all, чтобы получить функциональность, может быть дельта. Попробуйте использовать junit-dep вместо junit. Версия -dep не поставляется с Hamcrest, поэтому ваш импорт Hamcrest будет единственным. –

+1

Вот сообщение, которое описывает проблему: http://stackoverflow.com/questions/7869711/getting-nosuchmethoderror-org-hamcrest-matcher-describemismatch-when-running –

12

Использование

"blabla".equalsIgnoreCase("BlabLA") use for check equality ignore case 

Затем вы можете использовать

assertTrue("blabla".equalsIgnoreCase("BlabLA")) 
+1

It assertTrue (s1.equalsIgnoreCase (с2)); вот и все. –

4

Вы можете использовать assertTrue(s1.equalsIgnoreCase(s2))

4

Там нет прямой поддержки этого утверждают в JUnit (если вы используете JUnit, конечно), но вы можете использовать:

assertTrue("blabla".equalsIgnoreCase("BlabLA")) 

Это может быть стоит обернуть это в отдельный вспомогательный метод, который обеспечивает разумное сообщение об ошибке, если они не совпадают (посмотрите на документы для assertTrue, чтобы узнать, как это можно сделать).

+0

Не стоит беспокоиться - хотя проверить @JohnB ответ Я думаю, что это даст лучшие результаты (т. е. лучший выход, если тест не удастся), а также, возможно, более читабельны. – robjohncox

4

насчет:

assertEquals("blabla","BlabLA".toLowerCase()); 

или

assertEquals(expectedLowerCaseString,actualString.toLowerCase()); 

Тогда вы все еще можете увидеть разницу, если они не равны.

2

Рассмотрим AssertJ (ранее FEST) для утверждений, это было мое любимое утверждение API для испытаний в течение многих лет:

assertThat("blabla").isEqualToIgnoringCase("BlabLA"); 
Смежные вопросы