반응형
Mockito 메서드 호출 순서/시퀀스 확인
'아니다'가 '아니다'인지 확인할 수 있는 요?methodOne
라고 합니다.methodTwo
★★★★★★★★★★★★?
public class ServiceClassA {
public void methodOne(){}
}
public class ServiceClassB {
public void methodTwo(){}
}
public class TestClass {
public void method(){
ServiceClassA serviceA = new ServiceClassA();
ServiceClassB serviceB = new ServiceClassB();
serviceA.methodOne();
serviceB.methodTwo();
}
}
InOrder
도움이 됩니다.
ServiceClassA firstMock = mock(ServiceClassA.class);
ServiceClassB secondMock = mock(ServiceClassB.class);
Mockito.doNothing().when(firstMock).methodOne();
Mockito.doNothing().when(secondMock).methodTwo();
//create inOrder object passing any mocks that need to be verified in order
InOrder inOrder = inOrder(firstMock, secondMock);
//following will make sure that firstMock was called before secondMock
inOrder.verify(firstMock).methodOne();
inOrder.verify(secondMock).methodTwo();
InOrder 클래스를 사용하여 여러 개의 모크뿐만 아니라 단일 모의에서 다양한 메서드가 순서대로 호출되는지 확인할 수도 있습니다.
를 들어, 두 클래스가 해 보겠습니다.Foo
★★★★★★★★★★★★★★★★★」Bar
:
public class Foo {
public void first() {}
public void second() {}
}
public class Bar {
public void firstThenSecond(Foo foo) {
foo.first();
foo.second();
}
}
다음 테스트 그를 할 수 .Bar
의 »firstThenSecond()
'실제로'라고 부릅니다.first()
, , , 「 」second()
가 second()
, , , 「 」first()
코드를 이치노
public class BarTest {
@Test
public void testFirstThenSecond() {
Bar bar = new Bar();
Foo mockFoo = Mockito.mock(Foo.class);
bar.firstThenSecond(mockFoo);
InOrder orderVerifier = Mockito.inOrder(mockFoo);
// These lines will PASS
orderVerifier.verify(mockFoo).first();
orderVerifier.verify(mockFoo).second();
// These lines will FAIL
// orderVerifier.verify(mockFoo).second();
// orderVerifier.verify(mockFoo).first();
}
}
네, 이것은 설명서에 설명되어 있습니다.InOrder 클래스를 사용해야 합니다.
예(2개의 모크가 이미 작성되어 있는 경우):
InOrder inOrder = inOrder(serviceAMock, serviceBMock);
inOrder.verify(serviceAMock).methodOne();
inOrder.verify(serviceBMock).methodTwo();
Kotlin 사용자의 경우 다음과 같이 할 수 있습니다.
class MyTrackerTest {
private val trackEventUseCase: TrackEventUseCase = mock()
private val sut = MyTracker(trackEventUseCase)
@Test
fun `trackSomething SHOULD invoke tracker use case twice with correct event names WHEN called`() {
sut.trackSomething()
trackEventUseCase.inOrder {
verify().invoke("Is it August?")
verify().invoke("No!")
}
}
}
BDD를 사용하면
@Test
public void testOrderWithBDD() {
// Given
ServiceClassA firstMock = mock(ServiceClassA.class);
ServiceClassB secondMock = mock(ServiceClassB.class);
//create inOrder object passing any mocks that need to be verified in order
InOrder inOrder = inOrder(firstMock, secondMock);
willDoNothing().given(firstMock).methodOne();
willDoNothing().given(secondMock).methodTwo();
// When
firstMock.methodOne();
secondMock.methodTwo();
// Then
then(firstMock).should(inOrder).methodOne();
then(secondMock).should(inOrder).methodTwo();
}
언급URL : https://stackoverflow.com/questions/21901368/mockito-verify-order-sequence-of-method-calls
반응형
'source' 카테고리의 다른 글
고속 메모리 복사 방법(ARGB에서 BGR로) (0) | 2022.08.11 |
---|---|
vue-class-component를 사용하여 es6 vue-component 라이브러리를 구축하는 방법 (0) | 2022.08.11 |
마운트된 상위 구성 요소에서 비동기 메서드가 완료된 후에만 하위 구성 요소 (0) | 2022.08.11 |
VueJs와 같은 페이지에서 같은 앱을 여러 번 사용할 수 있습니까? (0) | 2022.08.11 |
Vuex - 변환 핸들러 외부의 vuex 저장소 상태 변환 안 함 (0) | 2022.08.11 |