Mockito-模拟遗留类构造函数 [英] Mockito - mocking legacy class constructor

查看:162
本文介绍了Mockito-模拟遗留类构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为通过构造函数引用旧类的类编写JUnit.遗留类位于第三方jar中,因此我无法对其进行重构以使生活更轻松....

I am writing JUnit for a class that references a legacy class via constructor. The legacy class is in a third party jar, so I can't refactor it to make life easier....

这是正在测试的课程...

This is the class being tested...

public MyClass {

    public String methodToTest(String param) {
        LegacyClass legacy = new LegacyClass(param);
        *..... etc ........*
    }
}

这就是我要在模拟JUnit中执行的操作.

This is what I am trying to do in the mockito JUnit.

public MyClassTest {

    @Test
    public void testMethodToTest() throws Exception {
        LegacyClass legacyMock = mock(LegacyClass.class);
        when(*the LegacyClass constructor with param is called*).thenReturn(legacyMock);
        *.... etc.....*
    }
}

关于如何执行此操作的任何想法?????

Any ideas on how I can do this ?????

推荐答案

LegacyClass创建 builder :

public class LegacyClassBuilder {

    public LegacyClass build(String param) {
        return new LegacyClass(param);
    }

}

这样可以测试您的班级,以便它创建带有正确参数的LegacyClass.

That way your class can be tested so it creates the LegacyClass with correct parameter.

public MyClass {

    private LegacyClassBuilder builder;

    public setBuilder(LegacyClassBuilder builder) {
        this.builder = builder;
    }

    public String methodToTest(String param) {
        LegacyClass legacy = this.builder.build(param);
        ... etc
    }
}

测试看起来像这样:

// ARRANGE
LegacyClassBuilder mockBuilder = mock(LegacyClassBuilder.class);
LegacyClass mockLegacy = mock(LegacyClass.class); 
when(mockBuilder.build(anyString()).thenReturn(mockLegacy);

MyClass sut = new MyClass();
sut.setBuilder(mockBuilder);
String expectedParam = "LOLCAT";


// ACT
sut.methodToTest(expectedParam);

// ASSERT
verify(mockBuilder).build(expectedParam);

如果LegacyClass恰好是final,则需要为MyClass将使用的LegacyClass创建非最终包装.

If LegacyClass happens to be final then you need to create non-final wrapper for LegacyClass that MyClass will use.

这篇关于Mockito-模拟遗留类构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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