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

标签 java unit-testing mocking super powermock

有时,当我编写单元测试时,我应该模拟对父类(super class)的引用。

我读过这个问题: question

这个答案answer with DI重构代码的建议。但是我做不到

这个答案 another answer如果父类(super class)方法足够大,则不适合。就我而言,我有非常大的代码。是的,我知道它违反了 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() 完成的操作。您还可以创建不对抑制执行任何操作的方法。您甚至可以抑制静态初始化程序 block 。

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

更新:

抑制似乎对我有用,但替换不行。见下图: enter image description here

关于java - 如何模拟 super 引用(在 super 类上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865555/

相关文章:

java - 具有条件限制的 Hibernate 搜索返回不正确的计数

java - 华为P Smart 2019手机中的虚拟陀螺仪?

Java垃圾回收 "real"时间比 "user"大很多 +"system"

c# - 如何为单元测试填充 HttpWebResponse.GetResponseAsync()?

objective-c - 使用 NSURLConnection 进行单元测试

javascript - 如何使用嵌套函数(javascript、jasmine)为第 3 方库编写 mock

java - 如何检查数组是否为空/空?

c# - ASP.NET MVC Controller 单元测试 - UrlHelper 扩展问题

unit-testing - Grails中的单元测试Promise任务

php - Symfony 服务中的模拟邮件程序