gpt4 book ai didi

java - 如何模拟返回模拟对象的方法

转载 作者:行者123 更新时间:2023-12-02 05:19:17 25 4
gpt4 key购买 nike

如何模拟返回模拟对象的方法。

我有一个方法,它返回一个模拟对象,该对象从 Object 转换为 SomeClass,然后调用 SomeClass 上的方法。

问题是方法 getBean("SomeClass") 返回一个 Object 而不是 SomeClass 所以 mock

when(mockApplicationContext.getBean("SomeClass")).thenReturn(mockSomeClass);

无法工作,因为返回类型是错误的并且是模拟的

when(mockApplicationContext.getBean("SomeClass")).thenReturn(mockObject);

SomeClass 上调用的方法不存在一样工作,并且我无法模拟 SomeClass

这怎么能被 mock 呢?

测试方法。

    public void anyMethod() {       

// code omitted

( (SomeClass) getApplicationContext().getBean("SomeClass") ).someMethod(anArgument);

// ...
}

测试方法。

@Test
public void testAnyMethod() {

// ...

SomeClass mockSomeClass = mock(SomeClass.class);
when(mockSomeClass.someMethod(anArgument)).thenReturn(someResult);

ApplicationContext mockApplicationContext = mock(ApplicationContext.class);
when(mockApplicationContext.getBean("SomeClass")).thenReturn(mockSomeClass);

PowerMockito.doReturn(mockApplicationContext).when(GetContext.class, "getApplicationContext");

// ...
}

最佳答案

如果您稍微更改方法实现以使用类型安全方法:

public void anyMethod() {       

// code omitted

getApplicationContext().getBean("SomeClass", SomeClass.class).someMethod(anArgument);

// ...
}

然后你的测试类只需要稍微改变一下:

@Test
public void testAnyMethod() {

// ...

SomeClass mockSomeClass = mock(SomeClass.class);
when(mockSomeClass).someMethod(anArgument).thenReturn(someResult);

// The problem is that .getBean("SomeClass") returns Object.class which is then cast
// to SomeClass in anyMethod. If I return an Object then someMethod(anArgument) dosent exist

ApplicationContext mockApplicationContext = mock(ApplicationContext.class);
when(mockApplicationContext.getBean("SomeClass", SomeClass.class)).thenReturn(mockSomeClass);

// ...
}

关于java - 如何模拟返回模拟对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26630354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com