PowerMock Klasse nicht gefunden
Ich aus irgendeinem Grund nicht Folgen können, ein ziemlich straight-forward PowerMock Beispiel.
Ich powermock-mockito-1.5.1-full
in meinem classpath, und ich versuchen zu testen, ein public final method (folgende diese Beispiel).
Aus irgendeinem Grund bin ich nicht in der Lage, um den import der PowerMock
Klasse.
import org.junit.*;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.cleancode.lifesaver.camera.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest(android.hardware.Camera.class)
public class CameraTests {
private android.hardware.Camera _cameraMock;
@Before
public void setUp() {
_cameraMock = PowerMockito.mock(android.hardware.Camera.class);
}
@Test
public void releaseCamera() {
ICamera camera = new Camera(_cameraMock);
//Compile error: PowerMock can't be resolved
PowerMock.replay(_cameraMock);
//I also tried PowerMockito.replay(_cameraMock) but that also doesn't exist.
camera.release();
Mockito.verify(_cameraMock).release();
}
}
Wie der Kommentar erklärt, der PowerMock
Klasse kann nicht importiert werden, von der power-mock-Glas.
Fühlt es sich wie eine dumme Frage, aber ich kann wirklich nichts finden im internet.
Wo sollte ich in der Lage, die statische Klasse PowerMock
? Ich habe auch Java zu Dekompilieren, um die Suche in der Bibliothek powermock, keine trifft auf powermock /replay.
ja, nur
PowerMock
Klasse nicht gefunden werden kann. PowerMockRunner
und PowerMockito
gefunden werden kann und auch kompilieren und ausführen.
InformationsquelleAutor bas | 2013-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beispiel sind folgende
PowerMock.replay(_cameraMock);
ist mit EasyMock, während Sie scheinen zu wollen, Mockito. Werfen Sie einen Blick auf dieses tutorial für mockito & power-mockKeine Notwendigkeit für facepalm, wir alle machen dumme Fehler. Cheers, ich"bin froh das ich helfen konnte
InformationsquelleAutor Morfic
Ich schlage vor, Sie nicht zu erstellen Sie Ihre mock in Ihrer
setUp()
(Vor) - Methode, da ein mock sehr kompliziert, zum Beispiel, können Sie es sagen, genau wie viele Zeit, die Sie sollten erwarten, dass eine Methode aufgerufen wird, wenn Sie erklären, eine "Allgemeine" mock für alle tests ist es sehr schwierig, dieses Verhalten Steuern.vielleicht (ohne den code kann ich nur vermuten) Sie möchten, dass Ihre
android.hardware.Camera
ist aufgerufen, in IhremCamera.release()
Methode, habe ich Recht? also ich sollte dies so tun:Die Methode, die Sie versuchen, zu verspotten ist nicht statisch, es ist eine normale final-Methode. Sie können versuchen, dies zu tun:
wenn innerhalb
camera.relase()
ist nicht genannt, genau einmal dieandroid.hardware.Camera.release()
Methode der test schlägt fehl.kein prob 😉 aber ich bin immer noch auf meine Ratschläge nicht zu verwenden tearup, es sei denn, dass, wenn extrem notwendig. Sie arbeiten im inneren jeder test bedeutet, dass Sie durch die Trennung der code ohne Probleme der Interaktion. Übrigens, nur eine Idee.
Könntest du bitte unterstreichen Ihren Vorschlag nicht schaffen, die mock im setup? Ich wäre sehr interessiert, zu verstehen, Ihre Argumentation, denn meiner Meinung nach ist es einfacher und schöner. Erhalten Sie zurücksetzen, um die zu verspotten, die vor jedem ausführen (wobei Sie sicher einen Lauf hat keinen Einfluss auf die anderen), und initialisieren Sie das gemeinsame Verhalten. Dann können Sie die benutzerdefinierte Verhalten für die aktuelle test-Methode in seinen Körper
I wie viel zu trennen, desto mehr kann ich jeden test, so kann es kein problem sein in das vergessen zum zurücksetzen des mock. Es ist nur eine Meinung, aber mir gefällt es besser, alle Verhaltensweisen unter Kontrolle in den test.
Nun, das war der schöne Teil ich Rede. Neu zu den mock in der Einrichtung, sorgt automatisch dafür, dass Sie nicht vergessen, um es zurückzusetzen 🙂
InformationsquelleAutor Gianmarco