배경에 대한 예외 반환 : 내 Oracle 데이터베이스에서가장 좋은 방법은 "예상"오라클의 자바 멋져요/Grails의
을, 나는 예외를 일으킬 수 있습니다 데이터베이스 호출의 많음이있다. 현재 오류 패키지를 호출하는 모든 예외 처리기가 있습니다. 긴 이야기를 짧게 줄이려면 결국 예상 오류 때문에 raise_application_error
이 발생하고 예기치 않은 오류가 발생하면 raise
가 발생하고 호출 Java Groovy/Grails 응용 프로그램 계층으로 다시 전송됩니다.
예를 들어, 사용자가 ID를 입력하고 검색을 클릭하면 데이터베이스에서 선택 쿼리를 실행합니다. ID가없는 경우 raise_application_error
사용자 지정 오류 메시지 (예 : "입력 한 ID를 찾을 수 없습니다.")를 수행하는 NO_DATA_FOUND
예외가 있습니다.
그러나 응용 프로그램 개발 팀은이 문제로 어려움을 겪고 있다고 말합니다 . 그들은 Groovy에서 단위 테스트를 수행하려고 시도하고 이상적으로 변수가 반환되기를 원합니다. 현재 반환하고있는 SQL 예외는 예외이므로 모든 테스트가 실패합니다.
이void nameOfProcedure() {
String result = storedProcedure.callDBProcedure(ConnectionType.MSSQL, val1, val2)
log.info "SQL Procedure query result value: "+ result
assertEquals("1", result)
}
그들은 테스트 이상과 같이 뭔가를 추가 할 수 있습니다 : 그들의 코드는 다음과 같습니다
@Test (expected = SQLException.class)
하지만이 모든 반환 된 SQLException 상관없이이 문제에 대한 올바른 예외 여부, 통과 의미 손에.
질문 :
이 문제에 대한 가장 좋은 방법은 무엇입니까? raise_application_errors보다는 내 예외 블록에서 변수를 반환해야한다는 압박을 받고 있습니다. 그러나 저는 이것이 항상 단순한 끔찍한 습관이라고 말했기 때문에 이것을하는 것을 매우 꺼립니다. 양자 택일로, 그들은 그들의 끝에 변화를 만들 수 있습니다. 그러나 분명히 꺼려합니다.
다음 단계는 무엇입니까? 예외가 아닌 "예상 된"오류를 변수로 반환하도록 코딩해야합니까? 그들은 Hamcrest 그들이에 대해 확인할 수 있습니다 자신의 사용자 정의 예외 속성을 만들 정합 사용하여 조언 가이드 like this 다음해야
BEGIN
SELECT id
FROM table
WHERE id = entered_id
EXCEPTION
WHEN NO DATA FOUND THEN
RETURN 'ID cannot be found';
END
을 또는 대안 : 누군가가 ID를 입력하면 예를 들어, 발견되지 않도록 그들의 JUnit 테스트. 가장 좋은 방법은 무엇입니까?
나는 순수 자바 코딩에서 잘못된 패스워드를 예외로 입력하는 것과 같은 것을 잡는 것은 나쁜 습관이라고 생각한다. 그러나 오라클과 스토어드 프로 시저가 관련 될 때, 분명히 갈 길이라고 생각합니다. 당신의 대답은 제가 그들이 할 수 있다고 생각했던 것과 정확하게 같습니다. –
Btw, ExpectedException 링크에 감사드립니다.나는이 시설에 대해 몰랐다. 그것은 매우 좋으며, 그들에게 맞는 방법을 보여줍니다. –