Android mock单例对象,如何对Java单例模式进行mock
最近剛開始轉行到Java編程,項目使用的是Junit4框架。其中遇到了采用單例模式(餓漢)實現的Java代碼,那么如何對該類中的方法進行模擬呢?因為該模式下所有的共有方法都是通過獲取該類的靜態私有實例來調用類中的共有方法,這就需要對該類的靜態私有實例對象來模擬。經過研究發現,可以使用Whitebox類來幫助我們模擬該靜態私有實例對象。
Java源代碼:
public class HelloWorld {
private static HelloWorld instance = new HelloWorld();
private HelloWorld() {}
public static HelloWorld getInstance() {return instance;}
public void say() {
System.out.println("Hello World!");
}
}
public class HelloWorld {
private static HelloWorld instance = new HelloWorld();
private HelloWorld() {}
public static HelloWorld getInstance() {return instance;}
public void say() {
System.out.println("Hello World!");
}
}
測試代碼:
public class HelloWorldAppTest {
private HelloWorldApp helloWorldApp;
@Before
public void setUp() throws Exception {
helloWorldApp = new HelloWorldApp();
}
@Test
public void sayHelloWorld() throws Exception {
HelloWorld instanceMock = PowerMockito.mock(HelloWorld.class);
Whitebox.setInternalState(HelloWorld.class, "instance", instanceMock);
Mockito.doNothing().when(instanceMock).say();
helloWorldApp.sayHelloWorld();
Mockito.verify(instanceMock).say();
}
}
不能使用“org.mockito.internal.util.reflection.Whitebox”,這個類不支持對私有字段進行模擬。
原文:http://xiangyun.blog.51cto.com/216525/1857181
總結
以上是生活随笔為你收集整理的Android mock单例对象,如何对Java单例模式进行mock的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 获取 js json数据类型,J
- 下一篇: 毕业与计算机专业,电子与计算机工程专业毕