请问一下java单元测试怎样消除mock静态方法对普通方法的影响?

java单元测试怎样消除mock静态方法对普通方法的影响


收到一只叮咚
浏览 1316回答 3
3回答

慕田峪4524236

有一些方法会依赖于第三方的包,例如在service方法中我们有可能会去调用数据库的执行结果,会取redis中缓存数据,也有可能会使用当前的系统时间,根据系统时间做一些逻辑处理。虽然方法的逻辑依赖于第三方的东西,但是我们的单元测试却不能依赖于第三方的东西,你不可能用单元测试去测试数据库是不是可靠的,数据库的可靠性不是单元测试的目的, 这时候我们就要模仿数据库等第三方包的行为,让这些第三方包返回我们想要的东西,从而将依赖关系简单化,只测试我们自己的

POPMUISE

传统的JMock是无法Mock静态方法的,但是Jmockit能够很好地Mock类的静态方法。[java] view plain copypackage features.jmockit.staticmock;public class StaticTarget {public static int m1() {throw new RuntimeException();}public static String m2() {throw new RuntimeException();}}

慕妹3242003

因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。但PowerMock可以mock静态方法,因为它直接在bytecode上工作,类似这样:import org.powermock.api.mockito.PowerMockito;import org.powermock.core.classloader.annotations.PrepareForTest;import org.powermock.modules.testng.PowerMockTestCase;import org.testng.Assert;import org.testng.annotations.Test;@PrepareForTest(AbstractAnimal.class)public class AbstractAnimalTest extends PowerMockTestCase {
打开App,查看更多内容
随时随地看视频慕课网APP