java静态方法获取对象_JavaPowerMockito模拟单个静态方法和返回对象
小編典典
你想要做的是1的一部分和2的全部的組合。
你需要使用PowerMockito.mockStatic為類的所有靜態(tài)方法啟用靜態(tài)模擬。這意味著可以使用when-thenReturn語(yǔ)法對(duì)它們進(jìn)行存根。
但是,當(dāng)你調(diào)用尚未在模擬實(shí)例上顯式存根的方法時(shí),你正在使用的2個(gè)參數(shù)的mathStatic重載為Mockito / PowerMock應(yīng)該執(zhí)行的操作提供了默認(rèn)策略。
從javadoc:
創(chuàng)建具有指定策略的類模擬,以解決交互問(wèn)題。這是一個(gè)非常高級(jí)的功能,通常你不需要它來(lái)編寫不錯(cuò)的測(cè)試。但是,在使用舊系統(tǒng)時(shí)可能會(huì)有所幫助。這是默認(rèn)答案,因此僅當(dāng)你不存根方法調(diào)用時(shí)才會(huì)使用它。
該默認(rèn)默認(rèn)磕碰的策略是只返回NULL,0或假的對(duì)象,數(shù)量和布爾值的方法。通過(guò)使用2-arg重載,你說(shuō)的是“不,不,不,默認(rèn)情況下,使用此Answer子類的answer方法獲取默認(rèn)值。它返回Long,因此,如果你有靜態(tài)方法返回的值與長(zhǎng)期存在問(wèn)題。
而是使用模擬靜態(tài)的1-arg版本啟用靜態(tài)方法的存根,然后使用when-thenReturn指定對(duì)特定方法執(zhí)行的操作。例如:
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());
}
}
字符串型靜態(tài)方法被存根以返回“ Hello!”,而整數(shù)型靜態(tài)方法使用缺省的存根,返回0。
2020-03-06
總結(jié)
以上是生活随笔為你收集整理的java静态方法获取对象_JavaPowerMockito模拟单个静态方法和返回对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java aio聊天_JAVA aio简
- 下一篇: 学java前要学css_教你一招:学习J