Я согласился бы с, 'это зависит' ответ, и также добавьте "Постепенное ухудшение": просто, потому что состав исполнителей перестал работать, где-нибудь не достаточно причины позволить сбою приложения (и пользователь теряют его работу, и т.д.). Я рекомендовал бы, чтобы комбинация утверждала и безопасное программирование:
ptr = dynamic_cast<MyClass>(obj);
ASSERT(ptr);
if(ptr)
{
// do stuff
}
Вот обходной путь, который я нашел в 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);
}
Либо вы запускаете модульный тест, и в этом случае Spring TX не должен входить в игру, либо вы запускаете какой-то интеграционный тест, в котором вы хотите проверить, что за сохранение метод работает, когда ваше исключение во время выполнения проглатывается . Я не думаю, что что-то идет не так, вам просто нужно убедиться, что вы понимаете, что именно вы пытаетесь проверить.
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.