Yapmak istediğiniz, 1'in bir kısmı ve 2'nin tamamının bir kombinasyonudur.
Bir sınıfın tüm statik yöntemleri için statik alaylamayı etkinleştirmek için PowerMockito.mockStatic'i kullanmanız gerekir . Bu, onları when-thenReturn sözdizimini kullanarak saplamalarını mümkün kılmak anlamına gelir .
Ancak, kullandığınız mockStatic'in 2 bağımsız değişkenli aşırı yüklemesi, Mockito / PowerMock'un, sahte örneğe açıkça basmadığınız bir yöntemi çağırdığınızda yapması gerekenler için varsayılan bir strateji sağlar.
Gönderen javadoc :
Etkileşimlere verdiği yanıtlar için belirli bir stratejiyle sınıf taklidi oluşturur. Oldukça gelişmiş bir özelliktir ve genellikle düzgün testler yazmak için buna ihtiyacınız yoktur. Ancak eski sistemlerle çalışırken yardımcı olabilir. Varsayılan cevap budur, bu nedenle yalnızca yöntem çağrısını başlatmadığınızda kullanılacaktır.
Varsayılan varsayılan ağaç sökme strateji nesne, sayı için sadece dönüş boş, 0 veya yanlış olduğunu ve değerli yöntemler boolean. 2 argümanlı aşırı yüklemeyi kullanarak, "Hayır, hayır, hayır, varsayılan olarak bu Yanıt alt sınıfının yanıt yöntemini varsayılan bir değer elde etmek için kullanın. Bir Long döndürür, bu nedenle uyumsuz bir şey döndüren statik yöntemleriniz varsa Uzun, bir sorun var.
Bunun yerine, statik yöntemlerin saplamasını etkinleştirmek için mockStatic'in 1-arg sürümünü kullanın, ardından belirli bir yöntem için ne yapılacağını belirtmek için when-thenReturn işlevini kullanın. Örneğin:
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
class ClassWithStatics {
public static String getString() {
return "String";
}
public static int getInt() {
return 1;
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
@Test
public void test() {
PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");
System.out.println("String: " + ClassWithStatics.getString());
System.out.println("Int: " + ClassWithStatics.getInt());
}
}
Dize değerli statik yöntem, "Merhaba!" Döndürmek için stubb edilirken, int değerli statik yöntem 0 döndüren varsayılan saplamayı kullanır.