如何mock一个List类型的属性

项目开发的过程中,需要进行单元测试,然而在mock的时候,发现目标类的一个属性是List的:
在这里插入图片描述
使用常规的@mock注解方式并没有奏效
在这里插入图片描述在这里插入图片描述
那么 这种情况怎么办呢?
解决代码如下:
在这里插入图片描述
观察控制台:
在这里插入图片描述
成功~

源码贴出:

@RunWith(SpringJUnit4ClassRunner.class)
public class SmartServiceTest {

    @InjectMocks
    private SmartService smartService;

    @Mock
    private ASpiServiceImp aSpiServiceImp;

    @Spy
    private List<TestSpiService> testSpiServiceList =  new ArrayList();;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
        testSpiServiceList.add(aSpiServiceImp);
    }

    @Test
    public void test1() {
        smartService.print();
    }

参考资料:https://stackoverflow.com/questions/33302340/how-to-mock-a-autowired-list-of-spring-beans

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mockito 中,如果要 mock一个对象属性中嵌套相同的对象多次,可以使用 `side_effect` 参数来设置不同的返回值。具体来说,可以针对每个需要 mock 的对象设置一个返回值列表,然后在 `side_effect` 中使用这些列表来模拟多次调用返回不同的值。 举个例子,假设有以下的类和对象: ```python class User: def __init__(self, name, age): self.name = name self.age = age class Group: def __init__(self, name, users): self.name = name self.users = users user1 = User('Alice', 20) user2 = User('Bob', 25) group = Group('Group1', [user1, user2]) ``` 那么在测试中,可以这样 mock 对象属性中嵌套相同的对象多次: ```python import unittest from unittest.mock import Mock class TestMockito(unittest.TestCase): def test_mock_nested_objects(self): user_mock1 = Mock(spec=User, name='UserMock1') user_mock2 = Mock(spec=User, name='UserMock2') group_mock = Mock(spec=Group, name='GroupMock') user_mock1.name = 'AliceMock1' user_mock2.name = 'BobMock1' group_mock.name = 'GroupMock1' user_mock1.age = 21 user_mock2.age = 26 group_mock.users = [[user_mock1, user_mock2], [user_mock2, user_mock1]] user_mock1_return_values = ['AliceMock2', 'AliceMock3'] user_mock2_return_values = ['BobMock2', 'BobMock3'] group_mock_return_values = ['GroupMock2', 'GroupMock3'] user_mock1.name.side_effect = user_mock1_return_values user_mock2.name.side_effect = user_mock2_return_values group_mock.name.side_effect = group_mock_return_values self.assertEqual(user_mock1.name, 'AliceMock2') self.assertEqual(user_mock2.name, 'BobMock2') self.assertEqual(group_mock.name, 'GroupMock2') self.assertEqual(group_mock.users, [[user_mock1, user_mock2], [user_mock2, user_mock1]]) self.assertEqual(user_mock1.name, 'AliceMock3') self.assertEqual(user_mock2.name, 'BobMock3') self.assertEqual(group_mock.name, 'GroupMock3') self.assertEqual(group_mock.users, [[user_mock1, user_mock2], [user_mock2, user_mock1]]) ``` 在上面的测试函数中,我们使用 `Mock()` 函数创建了需要 mock 的对象,然后分别设置了它们的属性和返回值列表。在 `side_effect` 中,我们使用了这些返回值列表来模拟多次调用返回不同的值。最后在测试中,我们分别测试了每次调用返回的值是否正确。 需要注意的是,如果在 `side_effect` 中使用了返回值列表,那么这个列表的长度必须和函数被调用的次数相同,否则会抛出异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值