카테고리 없음

[자바] 예외 처리 코드를 테스트하기위한 테스트 코드를 어떻게 작성합니까?

필살기쓰세요 2021. 2. 10. 09:17

이에 접근하는 한 가지 방법 :

  1. 해당 예외를 처리 하는 책임은 자체 클래스에 있습니다.
  2. 그런 다음 종속성 주입 을 사용하여 새 클래스의 객체를 클래스 A에 제공 합니다.
  3. 이제 당신은 전달과 같은 EasyMock에 또는 Mokito으로 조롱 프레임 워크를 사용 할 수 있습니다 조롱 A.으로 그 예외 핸들러 클래스의 인스턴스를
  4. 마지막으로 모의 객체가 예상 호출을 보는지 확인합니다.

이러한 접근 방식은 표면적으로는 "더 많은 작업"처럼 보일 수 있지만 우려 사항을 분리 할 때 더 나은 설계로 이어질 수 있습니다. 그리고 특별한 예외 처리기 클래스를 만들어서 클래스를 자체적으로 테스트 할 수도 있습니다!

-------------------

나는 notifyJDBCConnection그것이 이메일 발신자이든 아니든 일종의 알림 프레임 워크를 호출 것이라고 생각합니다. Mockito 와 같은 프레임 워크를 사용하여 해당 구성 요소를 모의하면 해당 구성 요소 에 대한 적절한 호출이 수행되었는지 확인할 수 있습니다.

-------------------

GhostCat에서 제안한 디자인으로 Mockito 및 JUnit을 사용하는 솔루션 :

class A {
    private final JDBCConnectionNotifier notifier;
    
        public A(JDBCConnectionNotifier notifier){
                this.notifier = notifier;
                    }
                    
                        public void doSomething()throws DBException {
                                try{
                                            //some code that might throw JDBCConnectionException 
                                                    }catch(JDBCConnectionException e){
                                                                notifier.notifyJDBCConnection()
                                                                        }catch(Exception e){
                                                                        
                                                                                }
                                                                                    }   
                                                                                    }
                                                                                    

따라서 테스트 클래스는 다음과 같습니다.

import static org.mockito.Mockito.*;
import org.junit.*;

class ATest {
    @Test
        public void shouldCallNotifierOnJDBCConnectionException() throws Exception {
                JDBCConnectionNotifier notifier = mock(JDBCConnectionNotifier.class);
                        A a = new A(notifier);
                        
                                a.doSomething();
                                
                                        verify(notifier).notifyJDBCConnection();
                                            }
                                            }
                                            


출처
https://stackoverflow.com/questions/39930067