さて、あなたは実際に興味深い部分、例をスキップしました:)それは次のとおりです:
// ...
@Autowired
private SessionFactory sessionFactory;
@Test // no expected exception!
public void falsePositive() {
updateEntityInHibernateSession();
// False positive: an exception will be thrown once the session is
// finally flushed (i.e., in production code)
}
@Test(expected = GenericJDBCException.class)
public void updateWithSessionFlush() {
updateEntityInHibernateSession();
// Manual flush is required to avoid false positive in test
sessionFactory.getCurrentSession().flush();
}
// ...
この例が説明しようとしているのは、実際flush
にセッション (別名、第 1 レベルのキャッシュ) でメモリ内の変更をデータベースと同期しない限り、実際にはデータベース統合をテストしていないため、実際に期待される動作をテストしていないか、失敗している可能性があるということです。問題。
たとえば、データベースは、たとえば制約違反が原因でエラーを返す可能性があり、データベースにヒットしない場合、falsePositive()
上記のテスト方法のように、この正しい動作を示すことはありません。このテスト メソッドは失敗するか、例外が発生するはずですが、合格するだけです。一方、フラッシュを使用したもう 1 つのテスト メソッドは、実際の動作をテストします。したがって、する必要がありflush
ます。