当前位置: 首页 > 知识库问答 >
问题:

使用EasyMock模拟静态字段

梁晋鹏
2023-03-14

我有一堂这样的课:

class Util {
    
    @Autowired
    static DbService service;
    
    public static Data formatData() {
        Data data=service.getData();
        //some logic here
    }
    
    public static void initService() {
        if(service==null){
            service=ObjectLocation.getObject(DbService .class);
        }
    }
}

我需要使用EasyMock模拟服务<代码>EasyMock。createMock()后跟replay()不起作用。P、 S:这是其他开发人员编写的遗留代码,我们不能在这里更改代码。

共有1个答案

酆翔宇
2023-03-14

考虑到服务的范围,假设测试在同一个包中,您可以执行以下操作。

public class UtilTest {

    @Test
    public void formatData() {
        DbService service = mock(DbService.class);
        Data expected = new Data();
        expect(service.getData()).andReturn(expected);
        replay(service);

        Util.service = service;

        assertSame(expected, Util.formatData());

        verify(service);
    }
    
}

如果出于某种原因,测试不在同一个包中,只需替换Util即可。服务=服务 依据

Field field = Util.class.getDeclaredField("service");
field.setAccessible(true);
field.set(null, service);
 类似资料:
  • 我正在尝试使用EasyMock+PowerMock模拟静态方法。如果我没有模拟静态方法,那么我会得到异常java.lang.ExceptioninInitializerError,但它有一个不同的堆栈跟踪,这完全是由于我的代码文件造成的,错误是显而易见的。但是,如果我使用EasyMock+PowerMock模拟静态方法,则行PowerMock.MockStaticNice(ClassName.Cl

  • 模拟由某个类实现的接口方法很容易,但如果有一个类并且有一个静态方法,那么我们如何借助easymock对其进行模拟呢?? supose是一个a类,有一个void retruned方法作为公共静态void methodA(一些参数…){} 我们如何在EasyMock的帮助下模仿A的方法methodA

  • 我尝试从以下方法创建单元测试,但我找不到一个解决方案来模拟每个方法内的调用,请您帮助我使用EasyMock为这些方法创建JUnit Test: 提前感谢

  • 我正在尝试为以下类编写单元测试: 还有一些其他方法,但这个设置代码是与我的问题相关的。在单元测试中,我想模拟(使用EasyMock)对象以及它将返回的和对象: 当我尝试用JUnit运行它时,我得到以下错误: 在上没有我可以看到的公共变量。我是EasyMock的新手,所以我想我的问题是:对于我应该告诉我的mock返回什么,以及如何告诉它这样做?我根本不知道为什么设置代码会被调用,所以这是另一个谜。更

  • 问题内容: 假设我有一个像这样的课程: 如何使用简单的模拟方法模拟静态方法调用?。 我正在使用简单的模拟3.0 问题答案: 不知道如何使用纯EasyMock,但可以考虑使用EasyMock 的PowerMock扩展。 它具有很多很酷的功能,可以满足您的需要 -https://github.com/jayway/powermock/wiki/MockStatic

  • 问题内容: 是否可以使用EaskMock模拟具体的类?如果是这样,我该怎么办? 问题答案: 请参阅EasyMock类扩展文档,并从SourceForge项目下载它。但是,您不能模拟最终方法。 编辑:如注释中所述,这是EasyMock v3及更高版本的一部分。