gpt4 book ai didi

java - 将模拟对象添加到 Mockito spy 列表 <>

转载 作者:行者123 更新时间:2023-12-01 19:39:46 24 4
gpt4 key购买 nike

Mockito Spy List 对象不能包含添加到其中的其他 Mock 对象吗?除了创建实际对象之外还有其他选择吗?

我有一个 spy 列表对象

Class TestableClassTest {
@InjectMocks
TestableClass myClassUnderTest;

@Mock
MyService myService
@Spy
List<MyBusinessClass> myBusinessClasses;
@Mock
MyBusinessClass myBusinessClass1;
@Mock
MyBusinessClass myBusinessClass2;

ResponseEntity result;

@Rule
MockitoRule rule = MockitoJunit.rule();

@Before
public void setup()
{
myBusinessClasses.add(myBusinessClass1);
myBusinessClasses.add(myBusinessClass2);
when(myService.get()).thenReturn(myBusinessClasses);
result = myClassUnderTest.testThisMethod();
}
@Test
public void resultIsReceivedWithNoException()
{ Assert.assertNotNull(result);}
}

但是这样做时会返回空指针异常

List<MyBusinessClass> list = someService.get(); MyBusinessClass 
myBusinessClass = list.get(0);// this is null

仅当我从 MyBusinessClass 创建真正的对象 myBusinessClass1myBusinessClass2 并将其添加到 spy() 列表。我的意思是,如果我使用 MyBusinessClass myBusinessClass1 = new MyBusinessClass() 创建对象,然后将其添加到列表中,我将不再获得 null。

编辑:所以我的问题是,当对一个类进行单元测试时,我们从模拟类的 get() 方法返回一个列表。如何将一些真实的具体数据放入该列表中,以便我正在测试的类方法可以处理该数据,然后我可以测试我的方法是否可以正确处理数据。

最佳答案

So my questions when Unit testing a class where we return a list from a mocked Class' get() method. How can I put in some real concrete data into that List so that my Class Method which I am testing can work on that data and then I can test that my method works correctly on the data.

鉴于 MyBusinessClass 是一个真正的依赖项,提供了一些业务逻辑,并且有自己的单元测试,该方法将如下所示:

@Mock
MyService myService

List<MyBusinessClass> myBusinessClasses = new ArrayList<>();
@Mock
MyBusinessClass myBusinessClass1;
@Mock
MyBusinessClass myBusinessClass2;

@Before
public void setup()
{
myBusinessClasses.add(myBusinessClass1);
myBusinessClasses.add(myBusinessClass2);
when(myService.get()).thenReturn(myBusinessClasses);
}

@Test
public void callSomeMethodOnReturnedEntries(){
new CodeUnderTest(myService).publicInterfaceMethod();

verify(myBusinessClass1).expectedMethodCall();
verify(myBusinessClass2).expectedMethodCall();
}

关于java - 将模拟对象添加到 Mockito spy 列表 <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713665/

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