Mocking-Methode ruft mit macht mockito - org.powermock.api.mockito.ClassNotPreparedException
Habe ich ein image loader-Klasse, und ich brauche zum testen einige statische Methoden. Da Mockito unterstützt keine statischen Methoden, die ich eingeschaltet, um Strom Mockito. Aber die statische Methode Teste ich eine Methode aufrufen
Base64.encodeToString(byteArray, Base64.DEFAULT);
Zu verhöhnen, bin ich mit mockStatic - Methode, wie unten mit @PrepareForTest annotation.
PowerMockito.mockStatic(Base64.class);
Aber Android studio ist wieder in mir immer noch die Rückkehr mir eine Fehlermeldung wie unten.
org.powermock.api.mockito.ClassNotPreparedException: Die Klasse
android.util.Base64 nicht bereit für den test. Zur Vorbereitung dieser Klasse hinzufügen
Klasse auf das '@PrepareForTest' annotation.
Unten ist mein kompletter code.
Code getestet werden:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;
import android.widget.ImageView;
public static String convertBitmapToBase64(Bitmap imageBitmap, boolean withCompression) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.PNG, 120, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
}
Test der Klasse code
import android.graphics.Bitmap;
import android.util.Base64;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.annotations.Test;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Base64.class})
public class ImageLoaderTest {
@Test
public void testConvertBitmap(){
byte[] array = new byte[20];
PowerMockito.mockStatic(Base64.class);
PowerMockito.when(Base64.encodeToString(array, Base64.DEFAULT)).thenReturn("asdfghjkl");
Bitmap mockedBitmap= PowerMockito.mock(Bitmap.class);
String output = ImageLoaderUtils.convertBitmapToBase64(mockedBitmap);
assert (!output.isEmpty());
}
}
Gradle dependencies
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock:1.6.5'
testCompile 'org.powermock:powermock-module-junit4:1.6.5'
testCompile 'org.powermock:powermock-api-mockito:1.6.5'
Importe Hinzugefügt. Die test-Klasse und der Klasse getestet werden, die dieselbe Einfuhren.
verwenden Sie junit oder testng ? da der test-annotation ist importiert von TestNG.
Ich änderte den import von TestNG, Junit und jetzt bin ich immer den Fehler als unten. "=============================================== Standard-Suite Total tests run: 0, Failures: 0, Skips: 0 =============================================== Prozess beendet mit exit-code 0 Leer test suite. "Ich bin nicht sicher, dass die Test-framework zu verwenden.
werfen Sie einen Blick auf developer.android.com/studio/test/index.html um zu verstehen, wie erstellen von unit-Tests und führen diese aus.
InformationsquelleAutor Ajith Memana | 2016-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort, die Sie nicht können. Hier aus dem FAQ:
Weitere Informationen über diese Einschränkung:
Wenn Sie verwenden möchten, PowerMock versuchen wie diesem:
InformationsquelleAutor JEY
Neben
@PrepareForTest
auch verwendenextends PowerMockTestCase
Beispiel:
@PrepareForTest({Base64.class})
public class ImageLoaderTest extends PowerMockTestCase
InformationsquelleAutor Akshay Thorve