android / android/android-test
NullPointerException in AndroidGoogleTest.java
- Vorherrschende Sprache
- Java
- Sterne
- 1.2k
- Forks
- 342
- Ø Merge
- 11 Std. 29 Min.
- Gemergte PRs (30 T.)
- 2
Beschreibung
### Description
When I execute my android integration test, I receive a `NullPointerException` in AndroidGoogleTest. It appears the `stackTraceFile` argument is `null`, which is pulled from `controller.getDeviceProperties().get("dalvik.vm.stack-trace-file")`
My build file
```
android_binary(
name = "euchrepay_googleplay_test_binary",
instruments = "//java/com/jeffreys/euchrepay/googleplay",
manifest = "AndroidManifest.xml",
custom_package = "com.jeffreys.euchrepay.googleplay.test",
deps = ["//javatests/com/jeffreys/common/euchre/ui:test_lib"],
)
android_instrumentation_test(
name = "euchrepay_googleplay_test",
target_device = "@android_test_support//tools/android/emulated_devices/generic_phone:google_27_x86_qemu2",
size = "large",
args = [
"--clear_package_data",
],
test_app = ":euchrepay_googleplay_test_binary",
flaky = True,
)
```
Sample test
```
package com.jeffreys.common.euchre.ui;
import static org.junit.Assert.assertNotNull;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import com.jeffreys.common.euchre.android.HelpActivity;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class HelpTest {
@Rule
public ActivityTestRule activityRule = new ActivityTestRule<>(HelpActivity.class);
@Test
public void verifyActivityCanBeCreated() {
assertNotNull(activityRule.getActivity());
}
}
```
### Steps to Reproduce
```
FLAGS="-c opt --incompatible_disable_deprecated_attr_params=false --incompatible_new_actions_api=false --host_force_python=PY2"
bazel test ${FLAGS} --spawn_strategy=standalone --test_timeout=300 //javatests/com/jeffreys/euchrepay/googleplay/...
```
This is on my system, though reproducing on another system is likely to be a challenge.
### Expected Results
Test runs and generates the proper pass/fail results
### Actual Results
```
There was 1 failure:
1) initializationError(com.google.android.apps.common.testing.suite.AndroidDeviceTestSuite)
java.lang.RuntimeException: Failed to create tests for given list of methods:
com.jeffreys.common.euchre.ui.HelpTest#verifyActivityCanBeCreated
com.jeffreys.common.euchre.ui.PreferencesTest#verifyActivityCanBeCreated
com.jeffreys.common.euchre.ui.TestGame#testCardLoader
com.jeffreys.common.euchre.ui.TestGame#testOnRestart
com.jeffreys.common.euchre.ui.TestGame#testPauseResume
com.jeffreys.common.euchre.ui.TestGame#verifyActivityCreated
com.jeffreys.common.euchre.ui.TestGame#verifyRestart
com.jeffreys.common.euchre.ui.UIUtilTest#verifyCardToDrawableId
com.jeffreys.common.euchre.ui.UIUtilTest#verifySVGLoading
com.jeffreys.common.euchre.ui.UIUtilTest#verifyUniqueIds
com.jeffreys.common.euchre.ui.ViewHandsTest#verifyActivityCreated
com.jeffreys.common.euchre.ui.ViewHandsTest#verifyCount
com.jeffreys.common.euchre.ui.ViewStatsTest#verifyActivityIsCreated
com.jeffreys.common.euchre.ui.ViewStatsTest#verifyListHasItems
com.jeffreys.common.euchre.ui.ViewStatsTest#verifyNumberOfGamesIsShown
at com.google.android.apps.common.testing.suite.AndroidDeviceTestSuite$Builder.makeNativeTestSuite(AndroidDeviceTe
stSuite.java:188)
at com.google.android.apps.common.testing.suite.AndroidDeviceTestSuite$Builder.build(AndroidDeviceTestSuite.java:1
03)
at com.google.android.apps.common.testing.suite.AndroidDeviceTestSuite.suite(AndroidDeviceTestSuite.java:64)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.internal.runners.SuiteMethod.testFromSuiteMethod(SuiteMethod.java:35)
at org.junit.internal.runners.SuiteMethod.(SuiteMethod.java:24)
at org.junit.internal.builders.SuiteMethodBuilder.runnerForClass(SuiteMethodBuilder.java:11)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:2
6)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at com.google.testing.junit.runner.internal.junit4.MemoizingRequest.createRunner(MemoizingRequest.java:48)
at com.google.testing.junit.runner.internal.junit4.MemoizingRequest.getRunner(MemoizingRequest.java:34)
at com.google.testing.junit.runner.junit4.JUnit4TestModelBuilder.get(JUnit4TestModelBuilder.java:49)
at com.google.testing.junit.runner.junit4.JUnit4TestModelBuilder.get(JUnit4TestModelBuilder.java:27)
at com.google.testing.junit.runner.util.MemoizingSupplier.get(MemoizingSupplier.java:44)
at com.google.testing.junit.runner.junit4.JUnit4Runner.run(JUnit4Runner.java:92)
at com.google.testing.junit.runner.BazelTestRunner.runTestsInSuite(BazelTestRunner.java:153)
at com.google.testing.junit.runner.BazelTestRunner.main(BazelTestRunner.java:84)
Caused by: java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:888)
at com.google.android.apps.common.testing.suite.AndroidGoogleTest.(AndroidGoogleTest.java:96)
at com.google.android.apps.common.testing.suite.AndroidGoogleTest.(AndroidGoogleTest.java:58)
at com.google.android.apps.common.testing.suite.AndroidGoogleTest$Builder.build(AndroidGoogleTest.java:162)
at com.google.android.apps.common.testing.suite.AndroidDeviceTestSuite$Builder.makeNativeTestSuite(AndroidDeviceTe
stSuite.java:181)
... 21 more
```
### AndroidX Test and Android OS Versions
bazel 3.3.1
```
android_sdk_repository(
name="androidsdk",
path="/var/lib/jenkins/tools/android-sdk",
api_level=29,
build_tools_version="29.0.3")
...
git_repository(
name = "android_test_support",
commit = "e694b99",
remote = "https://github.com/android/android-test",
)
maven_install(
artifacts = [
"androidx.annotation:annotation:1.1.0",
"androidx.appcompat:appcompat:1.1.0",
"androidx.fragment:fragment:1.1.0",
"androidx.preference:preference:1.1.0",
"androidx.core:core:1.1.0",
"androidx.test.espresso:espresso-core:3.3.0-rc01",
"androidx.test.espresso:espresso-idling-resource:3.3.0-rc01",
"androidx.test:core:1.3.0-rc01",
"androidx.test.ext:junit:1.1.2-rc01",
"androidx.test:monitor:1.3.0-rc01",
"androidx.test:rules:1.3.0-rc01",
"androidx.test:runner:1.3.0-rc01",
"com.google.android.gms:play-services-ads:18.2.0",
"com.google.android.gms:play-services-ads-lite:18.2.0",
...
]
)
```
### Link to a public git repo demonstrating the problem:
My repo is private
Beitragsleitfaden
Rechercherichtung
Beginne damit, das gemeldete Bazel-Testziel auszuführen, und untersuche AndroidGoogleTest.java im Bereich des Konstruktors in Zeile 96. Verfolge den Wert null für stackTraceFile aus controller.getDeviceProperties() zurück und ermittle, wie die Android-Gerätekonfiguration diesen Wert erzeugt. Erledigt ist die Aufgabe, wenn die Instrumentationstests initialisiert werden und ihre Bestehen-/Fehlschlagen-Ergebnisse ohne diese NullPointerException melden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- android, java
- Bereich
- mobile, testing-qa
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100