Mam klasę programu ładującego grafikę i muszę przetestować w niej pewne statyczne metody. Ponieważ Mockito nie obsługuje statycznych metod, przełączyłem się na Power Mockito. Ale metoda statyczna jestem testowania ma wywołanie metodyWywoływanie metod szykujących za pomocą power mockito - org.powermock.api.mockito.ClassNotPreparedException
Base64.encodeToString(byteArray, Base64.DEFAULT);
Aby to Mock używam mockStatic sposób jak poniżej @PrepareForTest adnotacji.
PowerMockito.mockStatic(Base64.class);
Ale studio Android zwraca mi wciąż zwracający mi błąd, jak poniżej.
org.powermock.api.mockito.ClassNotPreparedException: Klasa android.util.Base64 przygotowany do badania. Aby przygotować tę klasę, dodaj klasę do adnotacji "@PrepareForTest".
Poniżej znajduje się mój pełny kod.
Kod powinien być badany:
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);
}
testowy kod klasy
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 Zależności
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'
pokazać nam swoje import – JEY
@JEY Import dodał. Zarówno klasa testowa, jak i klasa, która ma być testowana, używają tego samego importu. –
używasz JUnit lub TestNG? ponieważ adnotacja testowa jest importowana z TestNG. – JEY