Возможно, есть лучшие варианты (я буду ждать других ответов), но один из них определяет три разных InOrder
, по одному на каждый вызов метода (objA, objB, objC) и транзакцию, а затем проверяет все InOrder самостоятельно ,
Что-то вроде этого (это просто пример): метод
class ObjA {
void method1() {}
}
class ObjB {
void method2() {}
}
class ObjC {
void method3() {}
}
class Transacction {
void commit() {};
}
class ClassToTest {
private ObjA objA;
private ObjB objB;
private ObjC objC;
Transacction transaction;
ClassToTest(ObjA objA, ObjB objB, ObjC objC, Transacction transaction) {
this.objA = objA;
this.objB = objB;
this.objC = objC;
this.transaction = transaction;
}
void method() {
objA.method1();
objC.method3();
objB.method2();
transaction.commit();
}
}
Теста:
@Test
public void testMethod() throws Exception {
ObjA objA = mock(ObjA.class);
ObjB objB = mock(ObjB.class);
ObjC objC = mock(ObjC.class);
Transacction transaction = mock(Transacction.class);
// Create a InOrder per each call and transaction
InOrder inOrderObjA = inOrder(objA, transaction);
InOrder inOrderObjB = inOrder(objB, transaction);
InOrder inOrderObjC = inOrder(objC, transaction);
ClassToTest classToTest = new ClassToTest(objA, objB, objC, transaction);
classToTest.method();
// Verify transaction.commit() is executed after objA.method1()
inOrderObjA.verify(objA).method1();
inOrderObjA.verify(transaction).commit();
// Verify transaction.commit() is executed after objB.method2()
inOrderObjB.verify(objB).method2();
inOrderObjB.verify(transaction).commit();
// Verify transaction.commit() is executed after objC.method3()
inOrderObjC.verify(objC).method3();
inOrderObjC.verify(transaction).commit();
}
Надеется, что это помогает
Привет @Vituel, Вы пробовали с ответом providedr? Надеюсь, что это помогло – troig