Как я утверждаю свое сообщение об исключении с Тестовой аннотацией JUnit?

Вы можете получить самое длинное слово в списке слов с помощью max() и снабдить ключевую функцию len.

Вы можете создать еще один блок для «пустых» слов и отсортировать все ваши слова в сегменты, используя цикл for и индексируя в свои сегменты с помощью len(word):

# create some demo strings and add some other words
words = [ str(10**k) for k in range(10)]
words.extend(["this","should","work","out","somehow"])

print(words)  # ['1', '10', '100', '1000', '10000', '100000', '1000000', '10000000',
              #  '100000000', '1000000000', 'this', 'should', 'work', 'out', 'somehow']

longest = len(max(words,key=len)) # get the length of the longest word

# create a empty bucket for "" and one bucket for length 1 up to longest
bins = [None] + [ [] for _ in range(longest+1)]  

# loop over words and put then in the bin at index len(word)
for w in words:
    bins[len(w)].append(w)

print(bins)

Вывод:

[None, ['1'], ['10'], ['100', 'out'], ['1000', 'this', 'work'], ['10000'], 
       ['100000', 'should'], ['1000000', 'somehow'], ['10000000'], 
       ['100000000'], ['1000000000']]

Доку:

285
задан ROMANIA_engineer 12 May 2015 в 21:25
поделиться

2 ответа

Мне никогда не нравился способ утверждать исключения с Junit. Если я использую "ожидаемый" в аннотации, кажется с моей точки зрения, которую мы нарушаем "данный, когда, то" шаблон, потому что "затем" помещается наверху тестового определения.

кроме того, если мы используем "@Rule", мы должны иметь дело с таким большим количеством шаблонного кода. Так, если бы можно установить новые библиотеки для тестов, я предложил бы взглянуть к AssertJ (что библиотека теперь идет с SpringBoot)

Затем тест, который не нарушает "given/when/then" принципы, и она сделана с помощью AssertJ для проверки:

1 - исключение - то, что мы ожидаем. 2 - Это имеет также ожидаемое сообщение

, будет похож на это:

 @Test
void should_throwIllegalUse_when_idNotGiven() {

    //when
    final Throwable raisedException = catchThrowable(() -> getUserDAO.byId(null));

    //then
    assertThat(raisedException).isInstanceOf(IllegalArgumentException.class)
            .hasMessageContaining("Id to fetch is mandatory");
}
1
ответ дан 23 November 2019 в 01:50
поделиться

Обязательно ли использовать @Test(expected=SomeException.class)? Когда нам нужно утверждать фактическое сообщение об исключении, мы делаем вот что.

@Test
public void myTestMethod()
{
  try
  {
    final Integer employeeId = null;
    new Employee(employeeId);
    fail("Should have thrown SomeException but did not!");
  }
  catch( final SomeException e )
  {
    final String msg = "Employee ID is null";
    assertEquals(msg, e.getMessage());
  }
}
28
ответ дан 23 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: