Aufrufen einer extra Activity in einem JUnit-Test?

  • Hallo Community,


    ist es möglich innerhalb eines JUnit-Tests eine extra Activity (unabhängig von der eigentlich zu testenen App) zu öffnen?
    Ich habe nämlich Folgendes vor:


    Ich möchte meine App mit verschiedenen Variablen/Eingaben testen können, ohne diese immer im Code selbst ändern zu müssen.
    Also stelle ich mir das so vor, dass ich mir eine Activity mit paar Dropdown-Menüs erstelle, die dann vor jedem Test ausgeführt wird. Dort wähle ich dann bestimmte Werte für Variablen und wenn ich auf einen "Bestätigungs"-Button klicke, soll der eigentliche Test für meine App mit den ausgewählten Werten ausgeführt werden.


    Habe schon ein wenig gegoogelt, aber bin leider auch nicht fündig geworden.


    Wäre seht nett, wenn mir jemand darüber Auskunft geben würde. Und falls dies nicht so einfach funktioniert, vielleicht einen Vorschlag geben, wie ich das regeln könnte.


    Danke schonmal im Voraus. :)




    MfG


    Tratorn

  • Hi Tratorn,


    soweit ich JUnit verstanden habe, ist das nicht möglich. Die Unittests agieren nur auf Objektebene unabhängig einer Activity.
    Welches Tool für Integrationstests und UITests angesagt sind weiß ich allerdings nicht.
    Die Doku spricht von instrumentation und uiautomator...
    Vielleicht helfen dir die Links und Tutorials weiter:


    Testing Fundamentals
    Tutorial zum Activity Testing


    Aber zurück zum eigentlichen Thema.
    Bist du dir sicher, dass du Unit Testing richtig verstanden hast?


    Test Cases sind vor Allem im Test Driven Development quasi DIE Richtlinie für die Entwicklung.
    Das heißt, du definierst mit deinen Tests vorab, welche Dinge möglich sind und welche nicht.


    Deine Tests müssen alle möglichen und unmöglichen Werte abfangen - aber jeweils nur einen.


    Sagen wir, du möchtest eine Divisionsfunktion testen. div(Double a, Double b);
    Testen und in deiner Funktion korrekt abfangen musst du: a = NULL, b = NULL, a = OutOfBounds, b = OutOfBounds, b = 0
    Testen und erfolgreich dividieren lassen musst du beispielsweise: a > b, a < b, a = b.


    Dabei ist es aber völlig egal, was genau jetzt a und b sind.
    Mir ist also nicht ganz klar, warum du die Testwerte variabel gestalten willst. Mit den variablen Werten haust du dir doch nur weitere Unwägbarkeiten rein, beispielsweise, weil du ausgerechnet a = b nicht getestet hast und dir das hier um die Ohren fliegt.
    Fix verdrahtet und getippt hat das Ganze viel mehr Aussagekraft - und kann auch jede Änderung am Code zuverlässig prüfen.


    Bestimmt ist mir irgend ein Punkt zum Prüfen nicht eingefallen. Und das ist das Problem: beim Testen via UI verdaddelst du einerseits Zeit und andererseits könntest du ein Szenario stumpf vergessen. Deshalb ist automatisiert IMMER besser als manuell.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hi Lucas de Vil,


    danke erstmal für deine ausführliche Antwort.


    Also mir gehts um Folgendes. In meiner App nutze ich einen mir vorgegebenen Algorithmus.
    Dafür muss ich paar Tests schreiben.


    Diese App ist eigentlich hauptsächlich erstmal nur dafür da, um zu zeigen, dass der Algorithmus gut auf nem Smartphone funktioniert. Die Activity dafür besteht auch nur aus nem Log-Window und 3 Buttons (Start, Stop, Reset).
    Dafür soll ich z.B. unter Anderem die CPU-Auslastung testen/protokolieren. Der Algorithmus nutzt auch die verschiedenen Sensoren und das wäre z.B. eine Sache, die ich vorher gerne auswählen würde, also welche Sensoren ich jetzt testen möchte. Gibt auch andere Dinge wie ein Delay, die variabel sein sollen.


    Ich weiß nicht, ob dafür JUnit-Tests geeignet sind, aber gibts denn bessere Alternativen dafür? Irgendwie muss sowas doch zu testen sein.


    Danke nochmal und hoffe ich habs verständlich genug ausgedrückt. ;)

  • Ich denke, ich verstehe.
    Nein, für diese Art Tests ist JUnit nicht gedacht. ;)


    JUnit ist ein Framework zur Durchführung automatisierter Unit Tests. Das heißt grob zusammengefasst:
    JUnit prüft, ob ein erstelltes Objekt seine versprochenen Methoden einhält und auch bei Fehleingaben stabil bleibt.


    Du möchtest, wenn ich das richtig verstehe, eher Benchmarks deines Algorithmus durchführen.
    Meines Wissens gibt es da nix Fertiges.


    Aber wenn du was gefunden (oder selbst erstellt) hast, dann ist das Erstellen der Vorab-Activity eigentlich kein allzu großes Problem mehr. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!