Junit4: expected=Exception, не работающий с SPRING

Я согласился бы с, 'это зависит' ответ, и также добавьте "Постепенное ухудшение": просто, потому что состав исполнителей перестал работать, где-нибудь не достаточно причины позволить сбою приложения (и пользователь теряют его работу, и т.д.). Я рекомендовал бы, чтобы комбинация утверждала и безопасное программирование:

ptr = dynamic_cast<MyClass>(obj);
ASSERT(ptr);
if(ptr)
{
   // do stuff
}
8
задан skaffman 11 September 2009 в 14:00
поделиться

3 ответа

Вот обходной путь, который я нашел в Junit 4.5 - разделите @Transactional и @ExpectedException на вложенные функции. Я предполагаю, что проблема связана с тем, что Spring использует метод @Transactional.

@Test
@ExpectedException(org.springframework.dao.DataIntegrityViolationException.class)
public void Test10UniqueName()
{
    DoTest10UniqueName();
}

@Transactional
public void DoTest10UniqueName()
{
    final String NAME = "NAME";
    ProductCategoryDAO dao = DAOFactory.getProductCategoryDAO();
    ProductCategory test1 = new ProductCategory();
    test1.setName(NAME);
    ProductCategory test2 = new ProductCategory();
    test2.setName(NAME);
    dao.save(test1);
    dao.save(test2);
}
5
ответ дан 5 December 2019 в 14:05
поделиться

Либо вы запускаете модульный тест, и в этом случае Spring TX не должен входить в игру, либо вы запускаете какой-то интеграционный тест, в котором вы хотите проверить, что за сохранение метод работает, когда ваше исключение во время выполнения проглатывается . Я не думаю, что что-то идет не так, вам просто нужно убедиться, что вы понимаете, что именно вы пытаетесь проверить.

1
ответ дан 5 December 2019 в 14:05
поделиться

Turned out that my first answer was wrong. Both @Test(expected=...) and @ExpectedException work, but there is some incompability between the Spring TestContext and Junit 4.5. Using Junit 4.4 solved the problem for me. Finally.

6
ответ дан 5 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

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