编程语言
首页 > 编程语言> > java-如何模拟超级引用(在超类上)?

java-如何模拟超级引用(在超类上)?

作者:互联网

有时,当我编写单元测试时,我应该模拟对超类的引用.

我读过这个问题:
question

这个答案answer with DI建议重构代码.但我不能

如果超类方法足够大,则此答案another answer不适合.就我而言,我有很大的代码.是的,我知道它违反了SOLID OOD原则,但是我只应该编写测试.我没有足够的时间进行重构.

说的问题是4年前问的!

当前Mockito或Powermock是否可以解决此问题?

更新

代码示例:

class BaseService {  
    public void save() {
      // a lot of code here! I cannot change this code.
    }  
}

public Childservice extends BaseService {  
    public void save(){  
        //logic for testing
        super.save();
       //logic for testing
    }  
} 

  更新2

public class Parent {
    public int save() {
         return 99;
    }   
}

public class Child extends Parent {
    public int save() {
        int i = super.save();
        return i*2;
    }
}

并测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Parent.class)
public class ParentTest {
    @Test
    public void testSave() {       
        PowerMockito.suppress(PowerMockito.methodsDeclaredIn(Parent.class));        
        System.out.println(new Child().save());
    }
}

输出:198

解决方法:

使用Powermock可以替换或取消显示方法,因此可以更改BaseService.save()所执行的操作.您还可以使方法对抑制不起作用.您甚至可以禁止使用静态初始化程序块.

请阅读this blog entry of the Powermock authors.请参见“更换”一章.

更新:

抑制似乎对我有用,但是请不要使用.见下图:

标签:unit-testing,mocking,super,powermock,java
来源: https://codeday.me/bug/20191121/2053716.html