powermock如何阻止静态代码块和调用私有方法
2014-04-15 17:58
316 查看
在项目中进行单元测试,发现很多类都采用了静态代码块,而静态代码块在class被容器load的时候就要被执行,如果执行错误就会导致junit单元测试错误,那么如何阻止静态代码块的执行呢?
如果我有一个被测试的Class如下:
我在单体测试的时候并没有library 对应的evil.dll 这样运行时就会导致我单元测试的时候错误
解决方法如下:
整体如下:
如果我有一个被测试的Class如下:
package com.roger.test; public class UnderTestClass { static { System.loadLibrary("evil.dll"); } private final String message = "test"; private String content; public String getMessage() { return message; } public String callPrivateContent(){ return getContent(); } private String getContent(){ content = "private"; return content; } }
我在单体测试的时候并没有library 对应的evil.dll 这样运行时就会导致我单元测试的时候错误
解决方法如下:
@SuppressStaticInitializationFor("com.roger.test.UnderTestClass")//阻止静态代码块运行
整体如下:
package com.roger.test; import java.lang.reflect.Method; import junit.framework.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(UnderTestClass.class) @SuppressStaticInitializationFor("com.roger.test.UnderTestClass")//阻止静态代码块运行 public class TestUnderTestClass { @Test public void testGetMessage() throws Exception{ UnderTestClass test = PowerMockito.spy(new UnderTestClass());//创建spy //断定调用私有方法的方法 PowerMockito.when(test.callPrivateContent()).thenCallRealMethod(); Assert.assertEquals("private", test.callPrivateContent()); //改变私有方法的返回值后,断定调用私有方法的方法 PowerMockito.when(test,"getContent").thenReturn("test2"); Assert.assertEquals("test2", test.callPrivateContent()); //公共方法的断定 PowerMockito.when(test.getMessage()).thenReturn("test1"); Assert.assertEquals("test1", test.getMessage()); } }
相关文章推荐
- 总结面试中问到的一个问题构造函数、静态代码块、和调用的方法的加载顺序
- C#-面向对象——如何调用使用类 普通方法、静态方法的使用
- 如何防止私有方法被反射调用?
- java静态代码块和静态方法的区别和调用顺序、static用法
- 测试反射调用私有方法/私有静态方法
- 通过反射,如何操作私有成员变量(取/赋值),如何调用私有方法?
- 在静态方法中如何调用非静态方法
- 调用已编译成静态库的插件私有接口的方法
- 类中的静态方法如何调用?-------Bosent中同一类下面的两个服务怎么调用
- C# 反射调用私有 静态 方法
- C#如何静态调用C++中的方法(静态调用dll)
- myeclipse中调试调用带有静态代码块的类时出现java.lang.NoClassDefFoundError的处理方法
- Java中静态代码块,非静态代码块,以及父类与子类的构造方法的之间调用顺序
- ruby中如何调用与局部变量同名的私有方法
- Java中如何通过一个类名来调用另一个类的静态方法?
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- 类中的内部类(静态、非静态、私有)中方法(静态、非静态)的调用
- 关于cocos2dx如何绑定c++的静态方法和类给lua调用
- ruby中如何调用与局部变量同名的私有方法
- ruby中如何调用与局部变量同名的私有方法