Ich versuche, Instrumentierung Test für meine NetworkMonitorService
zu schreiben, wie in der offiziellen „testing your service“ Dokumentation beschrieben.Android: get Verweis auf gestartet Dienst in der Instrumentierung Test
Derzeit Ich bin fest, weil ich nicht herausfinden kann, wie kann ich einen Verweis auf den gestarteten Dienst, um greifen Mocks in sie zu injizieren und Verhalten geltend machen.
Mein Code:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class NetworkMonitorServiceTest {
@Rule public final ServiceTestRule mServiceTestRule = new ServiceTestRule();
@Test
public void serviceStarted_someEventHappenedInOnStartCommand() {
try {
mServiceTestRule.startService(new Intent(
InstrumentationRegistry.getTargetContext(),
NetworkMonitorService.class));
} catch (TimeoutException e) {
throw new RuntimeException("timed out");
}
// I need a reference to the started service in order to assert that some event happened
// in onStartCommand()...
}
}
Der betreffende Dienst nicht unterstützt verbindlich. Ich denke, wenn ich die Unterstützung für das Binden implementieren und dann im Test verwenden würde, um einen Verweis auf den Dienst zu erhalten, könnte es funktionieren. Ich mag es jedoch nicht, Produktionscode zu schreiben, nur um Testfälle zu unterstützen ...
Also, wie kann ich (Instrumentierungstest) eine Service
testen, die Bindung nicht unterstützt?
Ersetzen Sie Ihre Anwendung durch spezielle Version "für Tests". Tun Sie es, indem Sie einen speziellen Instrumentierungs-Test-Runner bereitstellen. Mock deine Abhängigkeiten es diese "App für Tests". Sehen Sie für Details http://Stackoverflow.com/a/41393275/2711056 – MyDogTom
@MyDogTom, ich dachte über diesen Ansatz nach, aber ich kann nicht einen einfachen Weg sehen, Service-Abhängigkeiten auf diese Weise zu verspotten. Können Sie ein Beispiel im Code angeben? – Vasiliy