First step deprecating StaticMockFixtureRule:
- Mark it as deprecated.
- Add support to StaticMockFixture on ExtendedMockitoRule
- Also deprecate ExtendedMockitoRule methods added to support
TestableDeviceConfig
Test: atest ModulesUtilsTestingTests
Bug: 281577492
Change-Id: I94f6245ee201df65449db242cd6fc33018b1c6cd
diff --git a/java/com/android/modules/utils/testing/ExtendedMockitoRule.java b/java/com/android/modules/utils/testing/ExtendedMockitoRule.java
index be64f4b..5a1d57e 100644
--- a/java/com/android/modules/utils/testing/ExtendedMockitoRule.java
+++ b/java/com/android/modules/utils/testing/ExtendedMockitoRule.java
@@ -35,8 +35,12 @@
import org.mockito.quality.Strictness;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
/**
* Rule to make it easier to use Extended Mockito:
@@ -66,6 +70,7 @@
private @Nullable final Runnable mAfterSessionFinishedCallback;
private final List<Class<?>> mMockedStaticClasses;
private final List<Class<?>> mSpiedStaticClasses;
+ private final List<StaticMockFixture> mStaticMockFixtures;
private final @Nullable SessionBuilderVisitor mSessionBuilderConfigurator;
private final boolean mClearInlineMocks;
@@ -80,11 +85,14 @@
mSessionBuilderConfigurator = builder.mSessionBuilderConfigurator;
mMockedStaticClasses = builder.mMockedStaticClasses;
mSpiedStaticClasses = builder.mSpiedStaticClasses;
+ mStaticMockFixtures = builder.mStaticMockFixtures == null ? Collections.emptyList()
+ : builder.mStaticMockFixtures;
mClearInlineMocks = builder.mClearInlineMocks;
Log.v(TAG, "strictness=" + mStrictness + ", testClassInstance" + mTestClassInstance
+ ", mockedStaticClasses=" + mMockedStaticClasses
+ ", spiedStaticClasses=" + mSpiedStaticClasses
- + ", mSessionBuilderConfigurator=" + mSessionBuilderConfigurator
+ + ", staticMockFixtures=" + mStaticMockFixtures
+ + ", sessionBuilderConfigurator=" + mSessionBuilderConfigurator
+ ", afterSessionFinishedCallback=" + mAfterSessionFinishedCallback
+ ", mockitoFramework=" + mMockitoFramework
+ ", mockitoSession=" + mMockitoSession
@@ -93,10 +101,7 @@
@Override
public Statement apply(Statement base, Description description) {
- createMockitoSession();
-
- // TODO(b/281577492): will need to provide a afterSessionCreated() callback in order to
- // change StaticMockFixtureRule to use it
+ createMockitoSession(description);
return new TestWatcher() {
@Override
@@ -116,39 +121,75 @@
}.apply(base, description);
}
- private void createMockitoSession() {
- Log.v(TAG, "Creating (and initializing mocks on) session builder with strictness "
- + mStrictness);
- StaticMockitoSessionBuilder sessionBuilder = mockitoSession().strictness(mStrictness)
- .initMocks(mTestClassInstance);
+ private void createMockitoSession(Description description) {
+ Log.v(TAG, "Creating session builder with strictness " + mStrictness);
+ StaticMockitoSessionBuilder mSessionBuilder = mockitoSession().strictness(mStrictness);
- setUpMockedClasses(sessionBuilder);
+ setUpMockedClasses(mSessionBuilder);
+
+ if (mTestClassInstance != null) {
+ Log.v(TAG, "Initializing mocks on " + description + " using " + mSessionBuilder);
+ mSessionBuilder.initMocks(mTestClassInstance);
+ } else {
+ Log.v(TAG, "NOT Initializing mocks on " + description + " as requested by builder");
+ }
if (mMockitoSession != null) {
Log.d(TAG, "NOT creating session as set on builder: " + mMockitoSession);
} else {
- Log.v(TAG, "Creating mockito session using " + sessionBuilder);
- mMockitoSession = sessionBuilder.startMocking();
+ Log.d(TAG, "Creating mockito session using " + mSessionBuilder);
+ mMockitoSession = mSessionBuilder.startMocking();
}
+
+ setUpMockBehaviors();
}
private void setUpMockedClasses(StaticMockitoSessionBuilder sessionBuilder) {
- mMockedStaticClasses.forEach((c) -> sessionBuilder.mockStatic(c));
- mSpiedStaticClasses.forEach((c) -> sessionBuilder.spyStatic(c));
+ if (!mStaticMockFixtures.isEmpty()) {
+ for (StaticMockFixture fixture : mStaticMockFixtures) {
+ Log.v(TAG, "Calling setUpMockedClasses(" + sessionBuilder + ") on " + fixture);
+ fixture.setUpMockedClasses(sessionBuilder);
+ }
+ }
+ for (Class<?> clazz: mMockedStaticClasses) {
+ Log.v(TAG, "Calling mockStatic() on " + clazz);
+ sessionBuilder.mockStatic(clazz);
+ }
+ for (Class<?> clazz: mSpiedStaticClasses) {
+ Log.v(TAG, "Calling spyStatic() on " + clazz);
+ sessionBuilder.spyStatic(clazz);
+ }
if (mSessionBuilderConfigurator != null) {
Log.v(TAG, "Visiting " + mSessionBuilderConfigurator + " with " + sessionBuilder);
mSessionBuilderConfigurator.visit(sessionBuilder);
}
}
+ private void setUpMockBehaviors() {
+ if (mStaticMockFixtures.isEmpty()) {
+ Log.v(TAG, "setUpMockBehaviors(): not needed, mStaticMockFixtures is empty");
+ return;
+ }
+ for (StaticMockFixture fixture : mStaticMockFixtures) {
+ Log.v(TAG, "Calling setUpMockBehaviors() on " + fixture);
+ fixture.setUpMockBehaviors();
+ }
+ }
+
private void tearDown(Description description, Throwable e) {
- Log.v(TAG, "Finishing mockito session " + mMockitoSession + " on " + description
- + " (e=" + e + ")");
+ Log.d(TAG, "Finishing mockito session " + mMockitoSession + " on " + description
+ + (e == null ? "" : " (which failed with " + e + ")"));
try {
try {
mMockitoSession.finishMocking(e);
mMockitoSession = null;
} finally {
+ // Must iterate in reverse order
+ for (int i = mStaticMockFixtures.size() - 1; i >= 0; i--) {
+ StaticMockFixture fixture = mStaticMockFixtures.get(i);
+ Log.v(TAG, "Calling tearDown() on " + fixture);
+ fixture.tearDown();
+ }
if (mAfterSessionFinishedCallback != null) {
mAfterSessionFinishedCallback.run();
}
@@ -180,6 +221,7 @@
private final Object mTestClassInstance;
private final List<Class<?>> mMockedStaticClasses = new ArrayList<>();
private final List<Class<?>> mSpiedStaticClasses = new ArrayList<>();
+ private @Nullable List<StaticMockFixture> mStaticMockFixtures;
private Strictness mStrictness = Strictness.LENIENT;
private @Nullable MockitoFramework mMockitoFramework;
private @Nullable MockitoSession mMockitoSession;
@@ -188,13 +230,23 @@
private boolean mClearInlineMocks = true;
/**
- * Constructs a builder for the giving test instance (typically {@code this}).
+ * Constructs a builder for the giving test instance (typically {@code this}) and initialize
+ * mocks on it.
*/
public Builder(Object testClassInstance) {
mTestClassInstance = Objects.requireNonNull(testClassInstance);
}
/**
+ * Constructs a builder that doesn't initialize mocks.
+ *
+ * <p>Typically used on test classes that already initialize mocks somewhere else.
+ */
+ public Builder() {
+ mTestClassInstance = null;
+ }
+
+ /**
* Sets the mock strictness.
*/
public Builder setStrictness(Strictness strictness) {
@@ -230,15 +282,34 @@
return this;
}
- // TODO(b/281577492): remove if / when it supports StaticMockFixture, as it's only used by
- // CachedAppOptimizerTest
+ /**
+ * Uses the supplied {@link StaticMockFixture} as well.
+ */
+ @SafeVarargs
+ public final Builder addStaticMockFixtures(
+ Supplier<? extends StaticMockFixture>... suppliers) {
+ List<StaticMockFixture> fixtures = Arrays
+ .stream(Objects.requireNonNull(suppliers)).map(s -> s.get())
+ .collect(Collectors.toList());
+ if (mStaticMockFixtures == null) {
+ mStaticMockFixtures = fixtures;
+ } else {
+ mStaticMockFixtures.addAll(fixtures);
+ }
+ return this;
+ }
+
+ // TODO(b/281577492): remove once CachedAppOptimizerTest doesn't use anymore
/**
* Alternative for {@link #spyStatic(Class)} / {@link #mockStatic(Class)}; typically used
* when the same setup is shared by multiple tests.
*
+ * @deprecated use {@link #addStaticMockFixtures(Supplier...)} instead
+ *
* @throws IllegalStateException if {@link #mockStatic(Class)} or {@link #spyStatic(Class)}
* was called before.
*/
+ @Deprecated
public Builder configureSessionBuilder(
SessionBuilderVisitor sessionBuilderConfigurator) {
Preconditions.checkState(mMockedStaticClasses.isEmpty(),
@@ -270,14 +341,14 @@
return this;
}
- // Used mostly by ExtendedMockitoRuleTest itself
+ // Used by ExtendedMockitoRuleTest itself
@VisibleForTesting
Builder setMockitoFrameworkForTesting(MockitoFramework mockitoFramework) {
mMockitoFramework = Objects.requireNonNull(mockitoFramework);
return this;
}
- // Used mostly by ExtendedMockitoRuleTest itself
+ // Used by ExtendedMockitoRuleTest itself
@VisibleForTesting
Builder setMockitoSessionForTesting(MockitoSession mockitoSession) {
mMockitoSession = Objects.requireNonNull(mockitoSession);
diff --git a/java/com/android/modules/utils/testing/StaticMockFixtureRule.java b/java/com/android/modules/utils/testing/StaticMockFixtureRule.java
index 36f6e32..def691a 100644
--- a/java/com/android/modules/utils/testing/StaticMockFixtureRule.java
+++ b/java/com/android/modules/utils/testing/StaticMockFixtureRule.java
@@ -45,7 +45,10 @@
* public final StaticMockFixtureRule mStaticMockFixtureRule =
* new StaticMockFixtureRule(mStaticMockFixtures);
* </pre>
+ *
+ * @deprecated use {@link ExtendedMockitoRule} instead.
*/
+@Deprecated
public class StaticMockFixtureRule implements TestRule {
private static final String TAG = StaticMockFixtureRule.class.getSimpleName();
diff --git a/java/com/android/modules/utils/testing/TestableDeviceConfig.java b/java/com/android/modules/utils/testing/TestableDeviceConfig.java
index 79b7876..ed4fe10 100644
--- a/java/com/android/modules/utils/testing/TestableDeviceConfig.java
+++ b/java/com/android/modules/utils/testing/TestableDeviceConfig.java
@@ -30,6 +30,7 @@
import android.provider.DeviceConfig;
import android.provider.DeviceConfig.Properties;
import android.util.ArrayMap;
+import android.util.Log;
import android.util.Pair;
import com.android.dx.mockito.inline.extended.StaticMockitoSessionBuilder;
@@ -52,6 +53,8 @@
*/
public final class TestableDeviceConfig implements StaticMockFixture {
+ private static final String TAG = TestableDeviceConfig.class.getSimpleName();
+
private Map<DeviceConfig.OnPropertiesChangedListener, Pair<String, Executor>>
mOnPropertiesChangedListenerMap = new HashMap<>();
private Map<String, String> mKeyValueMap = new ConcurrentHashMap<>();
@@ -69,6 +72,7 @@
@Override
public StaticMockitoSessionBuilder setUpMockedClasses(
StaticMockitoSessionBuilder sessionBuilder) {
+ Log.v(TAG, "setUpMockedClasses(): spying DeviceConfig");
sessionBuilder.spyStatic(DeviceConfig.class);
return sessionBuilder;
}
@@ -79,6 +83,7 @@
@Override
public void setUpMockBehaviors() {
doAnswer((Answer<Void>) invocationOnMock -> {
+ Log.v(TAG, "setUpMockBehaviors(): mocking call to " + invocationOnMock);
String namespace = invocationOnMock.getArgument(0);
Executor executor = invocationOnMock.getArgument(1);
DeviceConfig.OnPropertiesChangedListener onPropertiesChangedListener =
@@ -91,6 +96,7 @@
any(DeviceConfig.OnPropertiesChangedListener.class)));
doAnswer((Answer<Boolean>) invocationOnMock -> {
+ Log.v(TAG, "setUpMockBehaviors(): mocking call to " + invocationOnMock);
String namespace = invocationOnMock.getArgument(0);
String name = invocationOnMock.getArgument(1);
String value = invocationOnMock.getArgument(2);
@@ -122,6 +128,7 @@
}).when(() -> DeviceConfig.setProperties(any(Properties.class)));
doAnswer((Answer<String>) invocationOnMock -> {
+ Log.v(TAG, "setUpMockBehaviors(): mocking call to " + invocationOnMock);
String namespace = invocationOnMock.getArgument(0);
String name = invocationOnMock.getArgument(1);
return mKeyValueMap.get(getKey(namespace, name));
@@ -271,12 +278,25 @@
* <pre class="prettyprint">
* @Rule
* public final TestableDeviceConfigRule mTestableDeviceConfigRule =
- * new TestableDeviceConfigRule();
+ * new TestableDeviceConfigRule(this);
* </pre>
*/
- public static class TestableDeviceConfigRule extends StaticMockFixtureRule {
+ public static class TestableDeviceConfigRule extends ExtendedMockitoRule {
+
+ /**
+ * Creates the rule, without initializing any mock..
+ */
public TestableDeviceConfigRule() {
- super(TestableDeviceConfig::new);
+ super(new ExtendedMockitoRule.Builder()
+ .addStaticMockFixtures(TestableDeviceConfig::new));
+ }
+
+ /**
+ * Creates the rule, initializing the mocks for the given test.
+ */
+ public TestableDeviceConfigRule(Object testClassInstance) {
+ super(new ExtendedMockitoRule.Builder(testClassInstance)
+ .addStaticMockFixtures(TestableDeviceConfig::new));
}
}
}
diff --git a/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java b/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
index 37b5530..cb54f9f 100644
--- a/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
+++ b/javatests/com/android/modules/utils/testing/ExtendedMockitoRuleTest.java
@@ -20,7 +20,10 @@
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -32,6 +35,7 @@
import org.junit.runner.Description;
import org.junit.runner.RunWith;
import org.junit.runners.model.Statement;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoFramework;
import org.mockito.MockitoSession;
@@ -42,6 +46,7 @@
import org.mockito.plugins.MockitoPlugins;
import org.mockito.quality.Strictness;
+import java.util.function.Supplier;
@RunWith(MockitoJUnitRunner.class)
public final class ExtendedMockitoRuleTest {
@@ -51,6 +56,9 @@
private @Mock Description mDescription;
private @Mock Runnable mRunnable;
private @Mock ExtendedMockitoRule.SessionBuilderVisitor mSessionBuilderVisitor;
+ private @Mock StaticMockFixture mStaticMockFixture1;
+ private @Mock StaticMockFixture mStaticMockFixture2;
+ private @Mock StaticMockFixture mStaticMockFixture3;
private final ClassUnderTest mClassUnderTest = new ClassUnderTest();
private final ExtendedMockitoRule.Builder mBuilder =
@@ -60,6 +68,15 @@
private final ExtendedMockitoRule.Builder mUnsafeBuilder =
new ExtendedMockitoRule.Builder(mClassUnderTest).dontClearInlineMocks();
+ private final Supplier<StaticMockFixture> mSupplier1 = () -> {
+ return mStaticMockFixture1;
+ };
+ private final Supplier<StaticMockFixture> mSupplier2 = () -> {
+ return mStaticMockFixture2;
+ };
+ private final Supplier<StaticMockFixture> mSupplier3 = () -> {
+ return mStaticMockFixture3;
+ };
@Test
public void testBuilder_constructor_null() {
@@ -88,6 +105,12 @@
}
@Test
+ public void testBuilder_addStaticMockFixtures_null() {
+ assertThrows(NullPointerException.class,
+ () -> mBuilder.addStaticMockFixtures((Supplier<StaticMockFixture>) null));
+ }
+
+ @Test
public void testBuilder_afterSessionFinished_null() {
assertThrows(NullPointerException.class, () -> mBuilder.afterSessionFinished(null));
}
@@ -112,6 +135,13 @@
}
@Test
+ public void testMocksNotInitialized() throws Throwable {
+ new ExtendedMockitoRule.Builder().build().apply(mStatement, mDescription).evaluate();
+
+ assertWithMessage("@Mock object").that(mClassUnderTest.mMock).isNull();
+ }
+
+ @Test
public void testStrictness_lenientByDefault() throws Throwable {
applyRuleOnTestThatDoesntUseExpectation(/* strictness= */ null);
}
@@ -269,6 +299,89 @@
}
@Test
+ public void testAddStaticMockFixtures_once() throws Throwable {
+ InOrder inOrder = inOrder(mStaticMockFixture1, mStaticMockFixture2);
+
+ mUnsafeBuilder
+ .addStaticMockFixtures(mSupplier1, mSupplier2)
+ .build().apply(mStatement, mDescription).evaluate();
+
+ inOrder.verify(mStaticMockFixture1).setUpMockedClasses(any());
+ inOrder.verify(mStaticMockFixture2).setUpMockedClasses(any());
+
+ inOrder.verify(mStaticMockFixture1).setUpMockBehaviors();
+ inOrder.verify(mStaticMockFixture2).setUpMockBehaviors();
+
+ inOrder.verify(mStaticMockFixture2).tearDown();
+ inOrder.verify(mStaticMockFixture1).tearDown();
+ }
+
+ @Test
+ public void testAddStaticMockFixtures_twice() throws Throwable {
+ InOrder inOrder = inOrder(mStaticMockFixture1, mStaticMockFixture2, mStaticMockFixture3,
+ mStaticMockFixture3);
+
+ mUnsafeBuilder
+ .addStaticMockFixtures(mSupplier1, mSupplier2)
+ .addStaticMockFixtures(mSupplier3)
+ .build().apply(mStatement, mDescription).evaluate();
+
+ inOrder.verify(mStaticMockFixture1).setUpMockedClasses(any());
+ inOrder.verify(mStaticMockFixture2).setUpMockedClasses(any());
+ inOrder.verify(mStaticMockFixture3).setUpMockedClasses(any());
+
+ inOrder.verify(mStaticMockFixture1).setUpMockBehaviors();
+ inOrder.verify(mStaticMockFixture2).setUpMockBehaviors();
+ inOrder.verify(mStaticMockFixture3).setUpMockBehaviors();
+
+ inOrder.verify(mStaticMockFixture3).tearDown();
+ inOrder.verify(mStaticMockFixture2).tearDown();
+ inOrder.verify(mStaticMockFixture1).tearDown();
+ }
+
+ @Test
+ public void testMockAndSpyStaticAndAddStaticMockFixtures() throws Throwable {
+ InOrder inOrder = inOrder(mStaticMockFixture1, mStaticMockFixture2, mStaticMockFixture3,
+ mStaticMockFixture3);
+
+ mUnsafeBuilder
+ .mockStatic(StaticClass.class)
+ .spyStatic(AnotherStaticClass.class)
+ .addStaticMockFixtures(mSupplier1, mSupplier2)
+ .addStaticMockFixtures(mSupplier3)
+ .build()
+ .apply(new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ doReturn("mocko()").when(() -> StaticClass.marco());
+ doReturn("MOCKO()").when(() -> AnotherStaticClass.marco());
+
+ assertWithMessage("StaticClass.marco()")
+ .that(StaticClass.marco()).isEqualTo("mocko()");
+ assertWithMessage("StaticClass.water()")
+ .that(StaticClass.water()).isNull(); // not mocked
+
+ assertWithMessage("AnotherStaticClass.marco()")
+ .that(AnotherStaticClass.marco()).isEqualTo("MOCKO()");
+ assertWithMessage("AnotherStaticClass.water()")
+ .that(AnotherStaticClass.water()).isEqualTo("POLO");
+ }
+ }, mDescription).evaluate();
+
+ inOrder.verify(mStaticMockFixture1).setUpMockedClasses(any());
+ inOrder.verify(mStaticMockFixture2).setUpMockedClasses(any());
+ inOrder.verify(mStaticMockFixture3).setUpMockedClasses(any());
+
+ inOrder.verify(mStaticMockFixture1).setUpMockBehaviors();
+ inOrder.verify(mStaticMockFixture2).setUpMockBehaviors();
+ inOrder.verify(mStaticMockFixture3).setUpMockBehaviors();
+
+ inOrder.verify(mStaticMockFixture3).tearDown();
+ inOrder.verify(mStaticMockFixture2).tearDown();
+ inOrder.verify(mStaticMockFixture1).tearDown();
+ }
+
+ @Test
public void testConfigureSessionBuilder_afterMockStatic() throws Throwable {
assertThrows(IllegalStateException.class, () -> mBuilder.mockStatic(StaticClass.class)
.configureSessionBuilder(mSessionBuilderVisitor));
@@ -365,6 +478,21 @@
}
@Test
+ public void testMockitoFrameworkCleared_whenStaticMockFixturesFailed() throws Throwable {
+ MyMockitoFramework mockitoFramework = new MyMockitoFramework();
+ RuntimeException exception = new RuntimeException("D'OH!");
+ doThrow(exception).when(mStaticMockFixture1).tearDown();
+
+ Exception thrown = assertThrows(Exception.class,
+ () -> mBuilder.setMockitoFrameworkForTesting(mockitoFramework)
+ .addStaticMockFixtures(mSupplier1).build().apply(mStatement, mDescription)
+ .evaluate());
+
+ assertWithMessage("exception").that(thrown).isSameInstanceAs(exception);
+ assertWithMessage("mockito framework cleared").that(mockitoFramework.called).isTrue();
+ }
+
+ @Test
public void testMockitoFrameworkCleared_whenSessionFailsToFinish() throws Throwable {
MyMockitoFramework mockitoFramework = new MyMockitoFramework();
MockitoSessionThatFailsToFinish mockitoSession = new MockitoSessionThatFailsToFinish();
@@ -435,6 +563,9 @@
// MockitoFramework because of that
private static final class MyMockitoFramework implements MockitoFramework {
+ private static int sCounter;
+
+ private final int mId = ++sCounter;
public boolean called;
@Override
@@ -465,6 +596,11 @@
public MockitoFramework addListener(MockitoListener arg0) {
return null;
}
+
+ @Override
+ public String toString() {
+ return "MyMockitoFramework-" + mId;
+ }
};
// Used on tests that check if the clearInlineMocks() is called - such tests cannot mock a
diff --git a/javatests/com/android/modules/utils/testing/MultipleStaticMocksTest.java b/javatests/com/android/modules/utils/testing/MultipleStaticMocksTest.java
index b925a6c..a6fb68e 100644
--- a/javatests/com/android/modules/utils/testing/MultipleStaticMocksTest.java
+++ b/javatests/com/android/modules/utils/testing/MultipleStaticMocksTest.java
@@ -35,8 +35,8 @@
@SmallTest
public class MultipleStaticMocksTest {
@Rule
- public StaticMockFixtureRule mStaticMockFixtureRule =
- new StaticMockFixtureRule(AB::new, CD::new);
+ public ExtendedMockitoRule mExtendedMockitoRule = new ExtendedMockitoRule.Builder(this)
+ .addStaticMockFixtures(AB::new, CD::new).build();
private List<String> mCollected;
diff --git a/javatests/com/android/modules/utils/testing/TestableDeviceConfigAndOtherStaticMocksTest.java b/javatests/com/android/modules/utils/testing/TestableDeviceConfigAndOtherStaticMocksTest.java
index 8ebe424..68a5db9 100644
--- a/javatests/com/android/modules/utils/testing/TestableDeviceConfigAndOtherStaticMocksTest.java
+++ b/javatests/com/android/modules/utils/testing/TestableDeviceConfigAndOtherStaticMocksTest.java
@@ -36,8 +36,8 @@
@SmallTest
public class TestableDeviceConfigAndOtherStaticMocksTest {
@Rule
- public StaticMockFixtureRule mStaticMockFixtureRule =
- new StaticMockFixtureRule(TestableDeviceConfig::new, AB::new, CD::new);
+ public ExtendedMockitoRule mExtendedMockitoRule = new ExtendedMockitoRule.Builder(this)
+ .addStaticMockFixtures(TestableDeviceConfig::new, AB::new, CD::new).build();
private List<String> mCollected;