AbstractExtendedMockitoRule: fix session leak if setup fails am: 47952cc7bb
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/modules-utils/+/3509796
Change-Id: I3262787b502fb5f2faa6ba6ad1fd754be29425d0
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java b/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java
index 2242ca0..f391f36 100644
--- a/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java
+++ b/java/com/android/modules/utils/testing/AbstractExtendedMockitoRule.java
@@ -146,9 +146,9 @@
return new Statement() {
@Override
public void evaluate() throws Throwable {
- createMockitoSession(base, description);
Throwable error = null;
try {
+ createMockitoSession(base, description);
// TODO(b/296937563): need to add unit tests that make sure the session is
// always closed
base.evaluate();
diff --git a/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java b/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
index 26d0cc3..e91c28f 100644
--- a/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
+++ b/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
@@ -40,6 +40,7 @@
import org.junit.runners.model.Statement;
import org.mockito.InOrder;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoFramework;
import org.mockito.MockitoSession;
import org.mockito.exceptions.misusing.UnnecessaryStubbingException;
@@ -601,6 +602,19 @@
}
@Test
+ public void testMockitoSessionFinished_whenStaticMockFixturesSetupFailed() throws Throwable {
+ RuntimeException exception = new RuntimeException("D'OH!");
+ doThrow(exception).when(mStaticMockFixture1).setUpMockBehaviors();
+
+ assertThrows(Exception.class,
+ () -> mBuilder.addStaticMockFixtures(mSupplier1)
+ .build().apply(mStatement, mDescription).evaluate());
+
+ // Assert that the previous session was closed.
+ Mockito.mockitoSession().startMocking().finishMocking();
+ }
+
+ @Test
public void testGetClearInlineMethodsAtTheEnd() throws Throwable {
assertWithMessage("getClearInlineMethodsAtTheEnd() by default")
.that(mBuilder.build().getClearInlineMethodsAtTheEnd(mDescription)).isTrue();
@@ -834,4 +848,4 @@
@MockStatic(AnotherStaticClassMockedBySubClass.class)
private static final class SubClass extends SuperClass{
}
-}
\ No newline at end of file
+}