如何模拟超级引用(超类)? [英] How to mock super reference (on super class)?

查看:138
本文介绍了如何模拟超级引用(超类)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Sometimes when I write unit tests I should to mock reference to superclass.

我读过这个问题:
问题

这个回答回答DI 建议重构代码。但我不能

This answer answer with DI advice to refactor code. But I cannot it

这个答案另一个答案不合适如果超类方法足够大。在我的情况下,我有非常大的代码。是的我知道它是SOLID OOD原则,但我应该写测试。我没有足够的时间进行重构。

this answer another answer is not suitable if superclass method is enough big. In my case I have very big code. Yes I know that it is brokes SOLID OOD principes but I just should to write test. I have not enough time for refactor.

4年前问了这个问题!

said question was asked 4 years ago!

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

Does currently Mockito or Powermock can resolve this issue ?

代码示例:

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



update 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()。您也可以使方法无法抑制。您甚至可以抑制静态初始化程序块。

With Powermock you can replace or suppress methods, so it is possible to change the action done by BaseService.save(). You can also make methods to do nothing with suppressing. You can even suppress static initializer blocks.

请阅读这篇Powermock作者的博客文章。请参阅更换一章。

Please read this blog entry of the Powermock authors. See chapter "Replacing".

更新:

抑制似乎对我有用,但不能替换。见下图:

Suppress seems to work for me, but replace not. See the picture below:

这篇关于如何模拟超级引用(超类)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆