diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 90669fe5..16312c5a 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -81,18 +81,19 @@ jobs: strategy: fail-fast: false matrix: - # 21 is too old (not properly supported by github) - # mockito version is not working in 30+ + # API 21-26: not reliably supported by GitHub Actions (emulator boot failures observed on API 25) + # API 29: removed due to emulator hang issues on GitHub-hosted runners + # API 28 is the lowest level that boots consistently on GitHub-hosted runners include: - - api-level: 25 + - api-level: 28 arch: x86 target: google_apis - - api-level: 27 - arch: x86 + - api-level: 33 + arch: x86_64 target: google_apis - - api-level: 29 + - api-level: 36 arch: x86_64 - target: default + target: google_apis steps: - name: checkout uses: actions/checkout@v4 diff --git a/android-sdk/build.gradle b/android-sdk/build.gradle index 2cbb1dfd..b7e5e533 100644 --- a/android-sdk/build.gradle +++ b/android-sdk/build.gradle @@ -37,7 +37,13 @@ android { buildFeatures { buildConfig true } + packagingOptions { + resources { + pickFirsts += ['mockito-extensions/org.mockito.plugins.MockMaker', 'mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider'] + } + } testOptions { + execution 'ANDROIDX_TEST_ORCHESTRATOR' unitTests.returnDefaultValues = true unitTests.all { jvmArgs = [ @@ -54,7 +60,7 @@ android { minifyEnabled false } debug { - testCoverageEnabled true + testCoverageEnabled false } } } @@ -93,6 +99,8 @@ dependencies { testImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "androidx.work:work-testing:$work_runtime" + androidTestUtil "androidx.test:orchestrator:1.5.0" + androidTestUtil "androidx.test.services:test-services:1.5.0" androidTestImplementation "androidx.test.ext:junit:$androidx_test_junit" androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_ver" // Set this dependency to use JUnit 4 rules @@ -100,8 +108,11 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test_core" androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" - androidTestImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" - androidTestImplementation "org.mockito:mockito-android:$mockito_ver_sdk_module" + androidTestImplementation("org.mockito:mockito-core:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("org.mockito:mockito-android:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation "org.objenesis:objenesis:2.6" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.google.code.gson:gson:$gson_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java index 9c3effda..b9c37f3c 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java @@ -25,7 +25,6 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.optimizely.ab.OptimizelyUserContext; -import com.optimizely.ab.android.odp.DefaultODPApiManager; import com.optimizely.ab.odp.ODPApiManager; import com.optimizely.ab.odp.ODPEventManager; import com.optimizely.ab.odp.ODPManager; @@ -92,7 +91,7 @@ public class ODPIntegrationTest { @Before public void setup() throws Exception { - odpApiManager = mock(DefaultODPApiManager.class); + odpApiManager = mock(ODPApiManager.class); when(odpApiManager.sendEvents(anyString(), anyString(), anyString())).thenReturn(200); // return success, otherwise retried 3 times. odpEventManager = new ODPEventManager(odpApiManager); diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java index 4b1682c6..76957763 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyClientTest.java @@ -83,7 +83,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @RunWith(Parameterized.class) @@ -435,7 +435,7 @@ public void testGoodForcedTrack() { optimizelyClient.track("test_event", GENERIC_USER_ID); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); try { @@ -466,7 +466,7 @@ public void testGoodTrack() { OptimizelyClient optimizelyClient = new OptimizelyClient(optimizely, logger); optimizelyClient.track("test_event", GENERIC_USER_ID); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -488,7 +488,7 @@ public void onTrack(@Nonnull String eventKey, @Nonnull String userId, @Nonnull M assertTrue(notificationId <= 0); assertFalse(optimizelyClient.getNotificationCenter().removeNotificationListener(notificationId)); assertEquals(false, numberOfCalls[0]); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -516,7 +516,7 @@ public void onTrack(@Nonnull String eventKey, @Nonnull String userId, @Nonnull M else { assertEquals(true, numberOfCalls[0]); } - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -528,7 +528,7 @@ public void testGoodTrackBucketing() { Experiment experiment = optimizelyClient.getProjectConfig().getExperimentsForEventKey("test_event").get(0); attributes.put(BUCKETING_ATTRIBUTE, bucketingId); optimizelyClient.track("test_event", "userId", attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -573,7 +573,7 @@ public void testGoodForcedTrackAttribute() { optimizelyClient.track("test_event", GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); @@ -615,7 +615,7 @@ public void testGoodTrackAttribute() { optimizelyClient.track("test_event", GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); Variation v = optimizelyClient.getForcedVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID); assertEquals(v.getKey(), "var_2"); @@ -675,7 +675,7 @@ public void testGoodForcedTrackEventVal() { Collections.emptyMap(), Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); @@ -709,7 +709,7 @@ public void testGoodTrackEventVal() { GENERIC_USER_ID, Collections.emptyMap(), Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -754,7 +754,7 @@ public void testGoodTrackAttributeEventVal() { final HashMap attributes = new HashMap<>(); optimizelyClient.track("test_event", GENERIC_USER_ID, attributes, Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -774,7 +774,7 @@ public void testGoodForcedTrackAttributeEventVal() { attributes, Collections.singletonMap(ReservedEventKey.REVENUE.toString(), 1L)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); ArgumentCaptor logEventArgumentCaptor = ArgumentCaptor.forClass(LogEvent.class); @@ -843,7 +843,7 @@ public void testTrackWithEventTags() { final HashMap eventTags = new HashMap<>(); eventTags.put("foo", 843); optimizelyClient.track("test_event", GENERIC_USER_ID, attributes, eventTags); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -879,7 +879,7 @@ public void testForcedTrackWithEventTags() { // id of var_2 assertTrue(logEvent.getBody().contains("\"enrich_decisions\":true")); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); Variation v = optimizelyClient.getForcedVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID); assertEquals(v.getKey(), "var_2"); @@ -983,7 +983,7 @@ public void testGoodGetVariationAttribute() { logger); final HashMap attributes = new HashMap<>(); optimizelyClient.getVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @Test @@ -1000,7 +1000,7 @@ public void testGoodForcedGetVariationAttribute() { v = optimizelyClient.getVariation(FEATURE_ANDROID_EXPERIMENT_KEY, GENERIC_USER_ID, attributes); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); assertEquals(v.getKey(), "var_2"); @@ -1184,7 +1184,7 @@ public void testGoodIsFeatureEnabledWithAttribute() { Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); assertFalse(optimizelyClient.isFeatureEnabled( "InvalidFeatureKey", @@ -1305,7 +1305,7 @@ public void testIsFeatureEnabledWithFeatureEnabledTrue(){ Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -1402,7 +1402,7 @@ public void testGoodGetFeatureVariableBooleanWithAttr() { GENERIC_USER_ID, Collections.singletonMap("key", "value") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } @@ -1509,7 +1509,7 @@ public void testGoodGetFeatureVariableDoubleWithAttr() { GENERIC_USER_ID, Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableDouble Scenario#3 if feature not found @@ -1620,7 +1620,7 @@ public void testGoodGetFeatureVariableIntegerWithAttr() { GENERIC_USER_ID, Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableInteger Scenario#3 if feature not found @@ -1727,7 +1727,7 @@ public void testGoodGetFeatureVariableStringWithAttr() { GENERIC_USER_ID, Collections.singletonMap("house", "Gryffindor") )); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableString Scenario#3 if feature not found @@ -1841,7 +1841,7 @@ public void testGetFeatureVariableJsonWithAttr() { ); assertTrue(compareJsonStrings(json.toString(), defaultValueOfStringVar)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //FeatureVariableJSON Scenario#3 if feature not found @@ -1953,7 +1953,7 @@ public void testGetAllFeatureVariablesWithAttr() { ); assertTrue(compareJsonStrings(json.toString(), defaultValueOfStringVar)); - verifyZeroInteractions(logger); + verifyNoInteractions(logger); } //GetAllFeatureVariables Scenario#3 if feature not found diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java index 0478d959..f8d4f1f8 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/OptimizelyManagerTest.java @@ -824,7 +824,7 @@ public void initializeAsyncCallbackInBackgroundThread() throws InterruptedExcept } ); - boolean completed = latch.await(1, TimeUnit.SECONDS); + boolean completed = latch.await(5, TimeUnit.SECONDS); if (!completed) { fail("OptimizelyStartListener thread checking failed"); } @@ -855,7 +855,7 @@ public void initializeAsyncCallbackInMainThread() throws InterruptedException { } ); - boolean completed = latch.await(1, TimeUnit.SECONDS); + boolean completed = latch.await(5, TimeUnit.SECONDS); if (!completed) { fail("OptimizelyStartListener thread checking failed"); } diff --git a/android-sdk/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker b/android-sdk/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..7d92259b --- /dev/null +++ b/android-sdk/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +com.android.dx.mockito.inline.InlineDexmakerMockMaker diff --git a/build.gradle b/build.gradle index e40636d0..b8f8b720 100644 --- a/build.gradle +++ b/build.gradle @@ -97,13 +97,13 @@ ext { build_tools_version = "35.0.0" min_sdk_version = 21 target_sdk_version = 35 - java_core_ver = "4.3.1" + java_core_ver = "4.4.0" android_logger_ver = "1.3.6" jacksonversion= "2.11.2" annotations_ver = "1.2.0" junit_ver = "4.12" mockito_ver = "4.11.0" - mockito_ver_sdk_module = "2.28.2" + mockito_ver_sdk_module = "3.6.28" powermock_ver = "2.0.9" support_test_runner_ver = "0.5" dexmaker_ver = "1.4" diff --git a/datafile-handler/build.gradle b/datafile-handler/build.gradle index 43cfd62f..265ba7b7 100644 --- a/datafile-handler/build.gradle +++ b/datafile-handler/build.gradle @@ -36,7 +36,12 @@ android { minifyEnabled false } debug { - testCoverageEnabled true + testCoverageEnabled false + } + } + packagingOptions { + resources { + pickFirsts += ['mockito-extensions/org.mockito.plugins.MockMaker', 'mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider'] } } } @@ -60,8 +65,11 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test_core" androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" - androidTestImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" - androidTestImplementation "org.mockito:mockito-android:$mockito_ver_sdk_module" + androidTestImplementation("org.mockito:mockito-core:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("org.mockito:mockito-android:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation "org.objenesis:objenesis:2.6" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" diff --git a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java index 9c51b8f5..0b95b058 100644 --- a/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java +++ b/datafile-handler/src/androidTest/java/com/optimizely/ab/android/datafile_handler/BackgroundWatchersCacheTest.java @@ -59,7 +59,7 @@ public void setup() { @After public void tearDown() { - cache.delete(BackgroundWatchersCache.BACKGROUND_WATCHERS_FILE_NAME); + if (cache != null) cache.delete(BackgroundWatchersCache.BACKGROUND_WATCHERS_FILE_NAME); } @Test diff --git a/datafile-handler/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker b/datafile-handler/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..7d92259b --- /dev/null +++ b/datafile-handler/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +com.android.dx.mockito.inline.InlineDexmakerMockMaker diff --git a/event-handler/build.gradle b/event-handler/build.gradle index 6a01bc6d..79ec00ee 100644 --- a/event-handler/build.gradle +++ b/event-handler/build.gradle @@ -41,11 +41,17 @@ android { minifyEnabled false } debug { - testCoverageEnabled true + testCoverageEnabled false } } buildToolsVersion build_tools_version + + packagingOptions { + resources { + pickFirsts += ['mockito-extensions/org.mockito.plugins.MockMaker', 'mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider'] + } + } } dependencies { @@ -68,8 +74,11 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test_core" androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" - androidTestImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" - androidTestImplementation "org.mockito:mockito-android:$mockito_ver_sdk_module" + androidTestImplementation("org.mockito:mockito-core:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("org.mockito:mockito-android:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation "org.objenesis:objenesis:2.6" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" diff --git a/event-handler/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker b/event-handler/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..7d92259b --- /dev/null +++ b/event-handler/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +com.android.dx.mockito.inline.InlineDexmakerMockMaker diff --git a/gradle.properties b/gradle.properties index 09a4ebe4..70250523 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,6 @@ -# Maven local version (when android-sdk built for local maven repo) -version = 3.5.0-SNAPSHOT +# Maven version +# - keep SNAPSHOT for fallback for local build version +version = 0.0.0-SNAPSHOT android.enableJetifier=true android.useAndroidX=true diff --git a/odp/build.gradle b/odp/build.gradle index 98aba716..0d8b715d 100644 --- a/odp/build.gradle +++ b/odp/build.gradle @@ -39,10 +39,15 @@ android { minifyEnabled false } debug { - testCoverageEnabled true + testCoverageEnabled false } } buildToolsVersion build_tools_version + packagingOptions { + resources { + pickFirsts += ['mockito-extensions/org.mockito.plugins.MockMaker', 'mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider'] + } + } } dependencies { @@ -67,7 +72,10 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test_core" androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" - androidTestImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" - androidTestImplementation "org.mockito:mockito-android:$mockito_ver_sdk_module" + androidTestImplementation("org.mockito:mockito-core:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("org.mockito:mockito-android:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation "org.objenesis:objenesis:2.6" androidTestImplementation "org.slf4j:slf4j-api:$slf4j_ver" } diff --git a/odp/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker b/odp/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..7d92259b --- /dev/null +++ b/odp/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +com.android.dx.mockito.inline.InlineDexmakerMockMaker diff --git a/shared/build.gradle b/shared/build.gradle index fb48d149..bc1fde92 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -38,10 +38,15 @@ android { minifyEnabled false } debug { - testCoverageEnabled true + testCoverageEnabled false } } buildToolsVersion build_tools_version + packagingOptions { + resources { + pickFirsts += ['mockito-extensions/org.mockito.plugins.MockMaker', 'mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider'] + } + } } dependencies { @@ -76,8 +81,11 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test_core" androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" - androidTestImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" - androidTestImplementation "org.mockito:mockito-android:$mockito_ver_sdk_module" + androidTestImplementation("org.mockito:mockito-core:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("org.mockito:mockito-android:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation "org.objenesis:objenesis:2.6" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" } diff --git a/shared/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker b/shared/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..7d92259b --- /dev/null +++ b/shared/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +com.android.dx.mockito.inline.InlineDexmakerMockMaker diff --git a/user-profile/build.gradle b/user-profile/build.gradle index d501c8ed..7134749d 100644 --- a/user-profile/build.gradle +++ b/user-profile/build.gradle @@ -36,7 +36,12 @@ android { minifyEnabled false } debug { - testCoverageEnabled true + testCoverageEnabled false + } + } + packagingOptions { + resources { + pickFirsts += ['mockito-extensions/org.mockito.plugins.MockMaker', 'mockito-extensions/org.mockito.plugins.StackTraceCleanerProvider'] } } } @@ -61,8 +66,11 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test_core" androidTestImplementation "androidx.test:core-ktx:$androidx_test_core" - androidTestImplementation "org.mockito:mockito-core:$mockito_ver_sdk_module" - androidTestImplementation "org.mockito:mockito-android:$mockito_ver_sdk_module" + androidTestImplementation("org.mockito:mockito-core:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("org.mockito:mockito-android:$mockito_ver_sdk_module") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") { exclude group: 'org.objenesis' } + androidTestImplementation "org.objenesis:objenesis:2.6" androidTestImplementation "com.noveogroup.android:android-logger:$android_logger_ver" androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion" } diff --git a/user-profile/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker b/user-profile/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..7d92259b --- /dev/null +++ b/user-profile/src/androidTest/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +com.android.dx.mockito.inline.InlineDexmakerMockMaker