首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mockito:注入的模拟类不为其他类注入

Mockito:注入的模拟类不为其他类注入
EN

Stack Overflow用户
提问于 2016-10-24 22:45:59
回答 2查看 2.1K关注 0票数 0

所以我有一个简单的java类:

代码语言:javascript
复制
@Component
public class IWantToTestThisClass {

@Autowired
private ClassA classA;

@Autowired 
private ClassB classB;

public ObjectA doIt(...) {
   classB.returnObject();
}

ClassA包含:

代码语言:javascript
复制
@Component
public class ClassA { 

@Autowired 
private ClassB classB;

public ObjectA doIt() {
   classB.returnObject(...);
}

ClassB:

代码语言:javascript
复制
@Component
public class ClassB { 

public ObjectA returnObject(...) {
   ...
}

我的测试设置如下所示:

代码语言:javascript
复制
@InjectMocks
private IWantToTestThisClass iWantToTestThisClass;

@Mock
private ClassA classA;

@Mock
private ClassB classB;

@Before
public void setUp() {
    initMocks(this);

    when(classA.doSmt()).thenCallRealMethod();
    when(classB.doSmt()).thenCallRealMethod();
}

问题是没有为ClassA注入ClassB。

然后通过classA调用returnObject(ClassB),它返回NullPointerException(ClassB不是模拟/注入的)。

如果通过IWantToTestThisClass调用returnObject(classB),这是可以的。

这是一种同时为两个类注入ClassB的方法吗?我想调用真正的方法,而不是模拟的方法。

EN

回答 2

Stack Overflow用户

发布于 2016-10-24 22:54:11

你将mock注入到IWantToTestThisClass中,而不是注入到ClassA中,所以没有mock注入到ClassA中,B也没有被注入到那里。

尝试在classA之前添加@InjectMock

或者你可以这样做:

代码语言:javascript
复制
ClassB mB = Mockito.mock(ClassB.class);
classA.setClassB(mB);

如果添加设置器setClassB(...)转到ClassA

票数 0
EN

Stack Overflow用户

发布于 2018-07-28 02:00:26

可以用构造函数inject替换@Autowired。因此,您的classA将为:

代码语言:javascript
复制
@Component
public class ClassA { 

    private static ClassB classB;

    public ClassA(ClassB classB){
        this.classB=classB;
    }

    public ObjectA doIt() {
       classB.returnObject(...);
    }
}

通过这种方式,您可以稍后在您的@ setUp方法中注入classB模拟:

代码语言:javascript
复制
@Before
public void setUp() {
    initMocks(this);
    when(classA.doSmt()).thenCallRealMethod();
    when(classB.doSmt()).thenCallRealMethod();
    classB = new classB(classA);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40221323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档