logo

Mockito의 방법

Mockito 프레임워크는 Java 애플리케이션을 테스트하는 데 사용되는 mock(), verify(), when() 등과 같은 다양한 메서드를 제공합니다. 이러한 사전 정의된 방법을 사용하면 테스트가 매우 쉬워집니다.

Mockito 메소드에 대한 간략한 설명은 다음과 같습니다.

바이트를 문자열 파이썬으로

Mockito mock() 메서드

주어진 클래스나 인터페이스의 모의 객체를 만드는 데 사용됩니다. Mockito에는 5개가 들어있습니다. 모조품() 다양한 인수를 사용하는 메서드 모의 개체에 아무것도 할당하지 않으면 기본값을 반환합니다. 다섯 가지 방법 모두 객체를 조롱하는 동일한 기능을 수행합니다.

다음은 다양한 매개변수를 사용하는 mock() 메서드입니다.

    클래스가 있는 mock() 메소드:구체적인 클래스나 인터페이스의 모의 객체를 만드는 데 사용됩니다. 클래스나 인터페이스 이름을 매개변수로 사용합니다.
    통사론: mock(클래스 classToMock)답변이 포함된 mock() 메소드:특정 프로시저를 사용하여 클래스나 인터페이스의 모의 개체를 만드는 데 사용됩니다. 레거시 시스템으로 작업할 때 사용할 수 있는 고급 모의 방법입니다. 클래스 또는 인터페이스 이름과 함께 Answer를 매개변수로 사용합니다. 답변은 미리 구성된 모의 답변의 열거입니다.
    통사론: mock(클래스 classToMock, 답변 defaultAnswer)MockSettings가 포함된 mock() 메서드:일부 비표준 설정으로 모의 개체를 만드는 데 사용됩니다. 클래스 또는 인터페이스 이름과 함께 추가 설정 매개변수로 MockSettings를 사용합니다. MockSettings를 사용하면 추가 설정으로 모의 객체를 생성할 수 있습니다.
    통사론: mock(클래스 classToMock, MockSettings mockSettings)ReturnValues가 있는 mock() 메서드:특정 클래스나 인터페이스의 모의 객체를 생성할 수 있습니다. 이제는 ReturnValues가 Answer로 대체되므로 더 이상 사용되지 않습니다.
    통사론: mock(클래스 classToMock, ReturnValues ​​returnValues)문자열이 포함된 mock() 메서드:모의 이름을 지정하여 모의 개체를 만드는 데 사용됩니다. 디버깅에서는 모의 객체의 이름을 지정하는 것이 도움이 될 수 있지만 크고 복잡한 코드에는 사용하지 않는 것이 좋습니다.
    통사론: mock(클래스 classToMock, 문자열 이름)

다음 코드 조각은 사용 방법을 보여줍니다. 모조품() 방법:

 ToDoService doService = mock(ToDoService.class); 

Mockito when() 메서드

스텁 방법을 활성화합니다. 특정 메서드가 호출될 때 특정 값을 반환하도록 모의하려는 경우에 사용해야 합니다. 쉽게 말하면 ' 언제 XYZ() 메서드가 호출됩니다. 그 다음에 ABC를 반환하세요.' 실행해야 할 조건이 있을 때 주로 사용됩니다.

구문: when(T methodCall)

다음 코드 조각은 when() 메서드를 사용하는 방법을 보여줍니다.

 when(mock.someCode ()).thenReturn(5); 

위의 코드에서, 그런 다음 반환() 주로 다음과 함께 사용됩니다. 언제() 방법.

Mockito verify() 메서드

그만큼 확인하다() method는 지정된 일부 메서드가 호출되는지 여부를 확인하는 데 사용됩니다. 간단히 말해서 테스트에서 한 번 발생한 특정 동작을 검증합니다. 정의된 메소드가 호출되는지 확인하기 위해 테스트 코드의 맨 아래에 사용됩니다.

Mockito 프레임워크는 모의 객체에 대한 매개변수를 사용하여 모든 메소드 호출을 추적합니다. Mocking 후에는 verify() 메서드를 사용하여 정의된 조건이 충족되는지 여부를 확인할 수 있습니다. 이러한 유형의 테스트는 때때로 다음과 같이 알려져 있습니다. 행동 테스트. 메소드 호출 결과를 확인하는 대신 올바른 매개변수를 사용하여 메소드가 호출되는지 확인합니다.

verify() 메서드는 호출 횟수를 테스트하는 데에도 사용됩니다. 따라서 우리는 다음을 사용하여 정확한 호출 수를 테스트할 수 있습니다. 시간 방법, 적어도 한 번 방법, 그리고 대부분의 방법 조롱된 방법을 위해.

Mockito 클래스에는 다음과 같은 두 가지 유형의 verify() 메서드가 있습니다.

    verify() 메소드:특정 동작이 한 번 발생했는지 확인합니다.
    통사론: 검증(T mock)VerificationMode를 사용하는 verify() 메서드:일부 동작이 한 번 이상 발생했는지, 정확한 횟수가 발생했는지, 전혀 발생하지 않았는지 확인합니다.
    통사론: verify(T mock, VerificationMode 모드)

Mockito 스파이() 메서드

Mockito는 객체를 부분적으로 모의하는 방법을 제공합니다. 스파이 방법. spy 메소드를 사용하면 실제 객체가 존재하고, 해당 실제 객체에 대한 스파이 또는 스텁이 생성됩니다. 스파이를 사용하여 메서드를 스텁하지 않으면 실제 메서드 동작이 호출됩니다. spy() 메서드의 주요 기능은 실제 객체의 특정 메서드를 재정의한다는 것입니다. spy() 메소드의 기능 중 하나는 특정 메소드의 호출을 확인하는 것입니다.

Mockito 클래스에는 두 가지 유형의 spy() 메서드를 사용할 수 있습니다.

    스파이() 메소드:실제 객체의 스파이를 생성합니다. 스파이 메서드는 스텁되지 않는 한 실제 메서드를 호출합니다. 예를 들어 레거시 코드를 다룰 때 실제 스파이를 주의 깊게 사용해야 하고 가끔 사용해야 합니다.
    통사론: 스파이(T 개체)클래스가 있는 spy() 메서드:객체 대신 클래스를 기반으로 스파이 객체를 생성합니다. spy(T object) 메서드는 추상 클래스를 인스턴스화할 수 없기 때문에 감시하는 데 특히 유용합니다.
    통사론: spy(클래스 classToSpy)

다음 코드 조각은 spy() 메서드를 사용하는 방법을 보여줍니다.

 List spyArrayList = spy(ArrayList.class); 

Mockito 재설정() 메서드

Mockito Reset() 메소드는 모의 객체를 재설정하는 데 사용됩니다. 주로 컨테이너 주입 모의 작업에 사용됩니다. 일반적으로 Reset() 메서드를 사용하면 코드가 길어지고 테스트가 제대로 수행되지 않습니다. Reset() 메소드를 사용하는 것보다 새로운 모의 객체를 생성하는 것이 더 좋습니다. 이것이 바로 테스트에서 Reset() 메서드가 거의 사용되지 않는 이유입니다.

Reset() 메서드의 서명은 다음과 같습니다.

구조체 배열 C 프로그래밍
 public static void reset(T ... mocks) { MOCKITO_CORE.reset(mocks); } 

Mockito verifyNoMoreInteractions() 메소드

주어진 모의 객체에 확인되지 않은 상호 작용이 있는지 확인하는 데 사용됩니다. 모든 모의 객체를 확인한 후 이 메서드를 사용하여 모의 객체에서 다른 어떤 것도 호출되지 않았는지 확인할 수 있습니다. 또한 테스트 메서드(예: setup(), @Before 메서드 또는 생성자) 이전에 발생하는 확인되지 않은 호출을 감지합니다. 이는 선택적인 방법이므로 모든 테스트에서 사용할 필요는 없습니다.

verifyNoMoreInteractions() 메서드의 서명은 다음과 같습니다.

 public static void verifyNoMoreInteractions(Object... mocks) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } 

Mockito verifyZeroInteractions() 메서드

주어진 모의 객체에서 상호 작용이 발생하지 않았는지 확인합니다. 또한 테스트 메서드 이전(예: setup(), @Before 메서드 또는 생성자)에서 발생한 호출을 감지합니다.

verifyZeroInteractions() 메서드의 서명은 다음과 같습니다.

 public static void verifyZeroInteractions(Object... mocks) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } 

Mockito doThrow() 메서드

예외를 발생시키기 위해 void 메소드를 스텁할 때 사용됩니다. 각 메소드 호출에 대해 새로운 예외 인스턴스를 생성합니다. 아래와 같이 Mockito 클래스에서 서로 다른 매개 변수를 사용하여 사용할 수 있는 두 가지 유형의 doThrow() 메서드가 있습니다.

    Throwable을 사용하는 doThrow() 메서드:이 메서드는 예외가 있는 void 메서드를 스텁하려는 경우에 사용됩니다. 통사론: doThrow(Throwable toBeThrown)
    doThrow() 메서드의 서명은 다음과 같습니다.
 public static Stubber doThrow(Throwable toBeThrown) { return MOCKITO_CORE.doAnswer(new ThrowsException(toBeThrown)); } 
    클래스가 있는 doThrow() 메서드:이 메소드는 지정된 클래스의 예외를 발생시키기 위해 void 메소드를 스텁하려고 할 때 사용됩니다.
    통사론: doThrow(Thrown 클래스)
    doThrow() 메소드의 서명은 다음과 같습니다.
 public static Stubber doThrow(Class toBeThrown) { return MOCKITO_CORE.doAnswer(new ThrowsExceptionClass(toBeThrown)); } 

Mockito doCallRealMethod() 메서드

메소드의 실제 구현을 호출하려고 할 때 사용됩니다. 즉, 객체의 부분적인 모의를 만드는 데 사용됩니다. 실제 메서드를 호출하는 등 드문 상황에서 사용됩니다. 이는 spy() 메서드와 유사하며 유일한 차이점은 복잡한 코드가 생성된다는 것입니다.

doCallRealMethod() 메서드의 서명은 다음과 같습니다.

 public static Stubber doCallRealMethod() { return MOCKITO_CORE.doAnswer(new CallsRealMethods()); } 

Mockito doAnswer() 메서드

일반 Answer 유형을 사용하여 void 메소드를 스텁하려는 경우에 사용됩니다. doAnswer() 메서드의 서명은 다음과 같습니다.

 public static Stubber doAnswer(Answer answer) { return MOCKITO_CORE.doAnswer(answer); } 

Mockito doNothing() 메소드

void 메소드가 아무것도 하지 않도록 설정하는 데 사용됩니다. doNothing() 메서드는 드문 경우에 사용됩니다. 기본적으로 모의 인스턴스의 void 메서드는 아무 작업도 수행하지 않습니다. 즉, 작업이 수행되지 않습니다.

doNothing() 메소드의 서명은 다음과 같습니다.

 public static Stubber doNothing() { return MOCKITO_CORE.doAnswer(new DoesNothing()); } 

Mockito doReturn() 메서드

Mockito.when(객체)을 사용할 수 없는 드문 경우에 사용됩니다. Mockito.when(object) 메소드는 doReturn() 메소드에 비해 인수 유형이 안전하고 읽기 쉽기 때문에 항상 스텁에 권장됩니다.

doReturn() 메소드의 서명은 다음과 같습니다.

 public static Stubber doReturn(Object toBeReturned) { return MOCKITO_CORE.doAnswer(new Returns(toBeReturned)); } 

Mockito inOrder() 메서드

특정 순서로 모의 개체를 확인할 수 있는 개체를 만드는 데 사용됩니다. 모든 상호작용을 확인할 필요가 없으므로 순서대로 확인하는 것이 더 유연합니다. 테스트에 관심이 있는 상호 작용만 순서대로 확인하면 됩니다. 또한 inOrder() 메서드를 사용하여 순서 확인과 관련된 모의 객체를 전달하는 inOrder 객체를 생성할 수 있습니다.

Mockito.inOrder() 메소드의 서명은 다음과 같습니다.

 public static InOrder inOrder(Object... mocks) { return MOCKITO_CORE.inOrder(mocks); } 

MockitoignoreStubs() 메소드

검증을 위해 주어진 모의 객체의 스텁된 메서드를 무시하는 데 사용됩니다. verifyNoMoreInteractions() 또는 verify inOrder() 메서드와 함께 유용합니다. 또한 스텁된 통화에 대한 중복 확인을 피하는 데도 도움이 됩니다.

ignoreStubs() 메소드의 서명은 다음과 같습니다:

 public static Object[] ignoreStubs(Object... mocks) { return MOCKITO_CORE.ignoreStubs(mocks); } 

Mockito times() 메서드

이는 메소드 호출의 정확한 횟수를 확인하는 데 사용됩니다. 즉, 메소드가 호출된 횟수를 선언합니다. times() 메소드의 시그니처는 다음과 같습니다:

 public static VerificationMode times(int wantedNumberOfInvocations) { return VerificationModeFactory.times(wantedNumberOfInvocations); } 

Mockito never() 메서드

상호 작용이 발생하지 않았는지 확인하는 데 사용됩니다. never() 메소드의 서명은 다음과 같습니다:

여행이지만
 public static VerificationMode never() { return times(0); } 

Mockito atLeastOnce() 메서드

이는 메서드가 적어도 한 번 호출되어야 함을 의미하는 최소 한 번 호출을 확인하는 데 사용됩니다.

atLeastOnce() 메서드의 서명은 다음과 같습니다.

 public static VerificationMode atLeastOnce() { return VerificationModeFactory.atLeastOnce(); } 

Mockito atLeast() 메서드

최소 x회 호출을 확인하는 데 사용됩니다. 예를 들어, atLeast(3)이 주어지면 메소드가 최소 3번 호출된다는 의미입니다.

atLeast() 메서드의 서명은 다음과 같습니다.

 public static VerificationMode atLeast(int minNumberOfInvocations) { return VerificationModeFactory.atLeast(minNumberOfInvocations); } 

Mockito atMost() 메소드

최대 x회 호출을 확인하는 데 사용됩니다. 예를 들어, atMost(3)이 주어지면 메소드가 최대 3번 호출된다는 의미입니다.

atMost() 메소드의 서명은 다음과 같습니다.

 public static VerificationMode atMost(int maxNumberOfInvocations) { return VerificationModeFactory.atMost(maxNumberOfInvocations); } 

Mockito 호출() 메소드

탐욕스럽지 않은 검증을 순서대로 허용합니다. inOrder() 확인 방법에만 사용할 수 있습니다. 예를 들어, inOrder.verify(mock, presents(3)).xyzMethod('...');

call() 메소드의 서명은 다음과 같습니다.

 public static VerificationMode calls( int wantedNumberOfInvocations ){ return VerificationModeFactory.calls( wantedNumberOfInvocations ); } 

Mockito only() 메서드

지정된 메소드가 호출된 유일한 메소드인지 확인합니다. only() 메소드의 서명은 다음과 같습니다:

모니터 크기 찾는 방법
 public static VerificationMode only() { return VerificationModeFactory.only(); } 

Mockito timeout() 메서드

이를 통해 Mockito는 시간 초과로 확인을 수행할 수 있습니다. 즉시 실패하지 않고 특정 상호 작용을 위해 특정 기간 동안 기다리도록 확인에 지시합니다. 기존 상황에서 테스트하는 데 유용할 수 있습니다.

timeout() 메서드는 after() 메서드와 다릅니다. after() 메서드는 최종 결과가 선언되지 않는 한 전체 기간 동안 기다리는 반면, timeout() 메서드는 확인이 통과되자마자 중지됩니다. 테스트에는 거의 사용되지 않습니다.

timeout() 메서드의 서명은 다음과 같습니다.

 public static VerificationWithTimeout timeout(long millis) { return new Timeout(millis, VerificationModeFactory.times(1)); } 

Mockito after() 메서드

이를 통해 Mockito는 일정 기간 동안 확인할 수 있습니다. 우리는 after() 메소드가 timeout() 메소드와 다르다는 것을 이미 논의했습니다.

after() 메서드의 서명은 다음과 같습니다.

 public static VerificationAfterDelay after(long millis) { return new After(millis, VerificationModeFactory.times(1)); } 

Mockito verifyMockitoUsage() 메서드

Mockito 프레임워크의 잘못된 사용을 감지하기 위해 프레임워크 상태를 명시적으로 검증하는 데 사용됩니다. 항상 사용법을 확인하기 때문에 Mockito의 선택적 기능입니다. 내장 실행기(MockitoJUnitRunner)와 규칙(MockitoRule)은 모두 각 테스트 메서드 후에 verifyMockitoUsage() 메서드를 호출합니다.

verifyMockitoUsage() 메서드의 서명은 다음과 같습니다.

 public static void validateMockitoUsage() { MOCKITO_CORE.validateMockitoUsage(); } 

Mockito withSettings() 메서드

추가 모의 설정으로 모의를 만드는 데 사용됩니다. 테스트에 가끔 사용해야 합니다. withSettings() 메서드를 사용하는 대신 간단한 모의 객체를 사용하여 간단한 테스트를 생성하세요. MockSettings를 사용하는 주요 이유는 다음과 같습니다.

  • MockSetting을 사용하면 필요할 때 다른 모의 설정을 쉽게 추가할 수 있습니다.
  • 코드를 엉망으로 만들지 않고 다양한 모의 설정을 결합합니다.

withSettings() 메서드의 서명은 다음과 같습니다.

 public static MockSettings withSettings() { return new MockSettingsImpl().defaultAnswer(RETURNS_DEFAULTS); }