Ich schreibe einige Tests, um meine SQLLite-Datenbank-Code zu testen. Kann jemand hier erklären, wenn es einen Unterschied geben würde, diese Tests unter Verwendung des Kontexts zu schreiben, den ich von AndroidTestCase.getContext()
oder unter Verwendung IsolatedContext
erhält.IsolatedContext vs. AndroidTestCase.getContext()
Antwort
Für diejenigen, die nicht wollen, den Link zum Google-Gruppe zu folgen, hier ist die Antwort dort gegeben:
AndroidTestCase.getContext() gibt ein normales Context-Objekt zurück. Es ist der Kontext des Testfalls, nicht die zu testende Komponente.
IsolatedContext gibt einen "Scheinkontext" zurück. Ich setze "Mock" in Anführungszeichen , weil es im normalen Sinne dieses Begriffes (zum Testen) kein Mock ist. Stattdessen ist es ein Vorlagenkontext, den Sie selbst einrichten müssen. Es "isoliert" Sie von der laufenden Android-System, so dass Ihr Kontext oder Ihr Test nicht versehentlich außerhalb der Testvorrichtung. Für Beispiel wird ein IsolatedContext nicht versehentlich eine Produktion -Datenbank (sofern Sie es einrichten, um dies zu tun!) Beachten Sie jedoch, dass einige der Methoden in einem IsolatedContext Ausnahmen auslösen können. IsolatedContext ist im Developer Guide unter Framework Topics> Testing dokumentiert, sowohl in Testing Fundamentals als auch in Content Provider Testing.
Here is the Android docs on IsolatedContext.
And here is the relevant section of the Testing Fundamentals document.
hatte ich das einfache Problem: Ich brauche meine DAO-Klasse zu testen, ohne die reale Datenbank zu berühren. Also habe ich die IsolatedContext
von docs gefunden. Aber schließlich fand ich den anderen Kontext in der gleichen Dokumentation: RenamingDelegatingContext
könnte einfacher zu bedienen sein. Hier ist mein Testfall:
Danke, dieses Beispiel half mir endlich, herauszufinden, wie das geht. Ich musste ein paar Stunden lang die Android-Dokumentation gegoogelt und durchsucht haben und fand nie ein Beispiel, das so einfach und nützlich ist wie Ihres. –
Sie sollten in Erwägung ziehen, die inlined Antwort als richtig zu markieren, anstatt den Link, pro Stackoverflow Regeln über nicht nur die Bereitstellung von Links (die untergehen können). –