통합 테스트가 실행되는 데이터베이스에 데이터 모음이 있습니다. 데이터베이스에서 Hibernate 지속 객체 변경을 방지하기 위해 에서 상속받은 EventListener DefaultSaveOrUpdateEventListener이 구현되었습니다. 예상대로Nhibernate가 데이터베이스에 객체의 변경 사항을 유지하지 않도록하는 방법
public override void OnSaveOrUpdate(SaveOrUpdateEvent @event)
{
@event.Session.CancelQuery();
Trace.TraceWarning("NhibernateSaveUpdateCanceler: Persistence will be ignored.");
}
불행하게도이 작동하지 않습니다
은 그런 방법이있다. 그래서 의도 된 동작은 변경 사항이 데이터베이스에 쓰여지는 순간을 잡아서 객체를 떠난 채로 어떻게 든 취소 할 수 있도록하는 것입니다. 객체를 그대로두면 수정할 수 있으므로 유효성을 검사 할 수 있습니다.
감사합니다.
편집
가 한쪽에서 모든 거래에 사용할 수 있습니다 및 변경에 지속되지 않습니다 것을하도록 요구 사항에 모순이 변화를 지속함으로써이되도록 시험 방법에서 여러 트랜잭션이 있기 때문에이 작업을 수행 할 수 없습니다 다른 데이터베이스에서 데이터베이스.
왜 필요한가요? –
의도는 수정을 위해 객체를 검사 할 수 있지만 변경 사항이 데이터베이스에 반영되지 않으므로 동일한 데이터 세트에 대해 여러 테스트를 실행할 수있는 통합 테스트를 만드는 것입니다. –
...하지만 여러 트랜잭션으로 테스트를 실행하는 방법은 무엇입니까? 당신은 Fran의 답변에 대한 언급에서 그것을 언급했습니다. 이것은 작동하지 않습니다. 그리고 더 중요한 것은 동일한 트랜잭션 내에서 NH은 후속 쿼리가 작동하도록 변경 사항을 플러시해야한다는 것입니다. 당신이 플러싱을 억제한다면, 당신은 그것을 깨뜨릴 것입니다. –