如何在颤动中覆盖 mockito 中的特定行?

How to cover a specific line in mockito in flutter?

提问人:Nithyashree B L 提问时间:11/17/2023 更新时间:11/17/2023 访问量:25

问:

String get manageCaregiverLabel => isCaregiverAssignedToPatient ||
          caregiverStatus != null && caregiverStatus!.contains('Pending')
      ? 'Caregiver: ${_nameShortenerService.abbreviateLastName(
          _caregiverService.caregiverInvitation?.name ?? '',
        )}'
      : _localizer.myAccountLandingScreen_inviteCaregiver;




 test(
        'manageCaregiverLabel returns correct value when caregiver is assigned',
        () {
      when(
        mockUserService.relatedUserSummary,
      ).thenReturn(caregiverMockSummary);

      when(mockCaregiverService.caregiverInvitation?.name).thenReturn(null);
      when(mockNameShortenerService.abbreviateLastName(any))
          .thenReturn('John D.');

      when(
        mockCaregiverService.getCaregiverStatus(
          testLocal,
        ),
      ).thenReturn('Pending');
      final result = viewModel.isCaregiverAssignedToPatient ||
              viewModel.caregiverStatus != null &&
                  viewModel.caregiverStatus!.contains('Pending')
          ? 'Caregiver: ${mockNameShortenerService.abbreviateLastName(
              mockCaregiverService.caregiverInvitation?.name ?? '',
            )}'
          : localizer.myAccountLandingScreen_inviteCaregiver;

      expect(viewModel.caregiverStatus, isNotNull);
      expect(viewModel.caregiverStatus, 'Pending');
      expect(result, viewModel.manageCaregiverLabel);
    });
  });

这里只覆盖了这一行

caregiverStatus != null & & caregiverStatus!.contains('待定')

请帮我在 Mockito flutter 中也涵盖这一点。其他行显示已覆盖。但仅针对这一行,它没有被覆盖。

颤振 mockito

评论


答:

2赞 B.M.Samiul Haque Real 11/17/2023 #1

在您提供的代码中,您似乎正在尝试根据 Dart 代码中的条件测试 manageCaregiverLabel 方法的行为。

测试特定行 caregiverStatus != null & & caregiverStatus!。contains('Pending'),您需要相应地设置模拟对象和期望。您可以使用 Mockito 中的 when 和 thenReturn 方法来控制模拟对象的行为。

下面是如何修改测试以涵盖特定行的示例:

test(
  'manageCaregiverLabel returns correct value when caregiverStatus is Pending',
  () {
    // Set up your mock objects and expected values
    when(mockUserService.relatedUserSummary).thenReturn(caregiverMockSummary);
    when(mockCaregiverService.caregiverInvitation?.name).thenReturn(null);
    when(mockNameShortenerService.abbreviateLastName(any)).thenReturn('John D.');
    when(mockCaregiverService.getCaregiverStatus(testLocal)).thenReturn('Pending');

    // Trigger the method under test
    final result = viewModel.manageCaregiverLabel;

    // Verify the expectations
    verify(mockUserService.relatedUserSummary).called(1); // adjust the number as needed
    verify(mockCaregiverService.caregiverInvitation?.name).called(1);
    verify(mockNameShortenerService.abbreviateLastName(any)).called(1);
    verify(mockCaregiverService.getCaregiverStatus(testLocal)).called(1);

    // Add your assertions for the specific line
    expect(viewModel.caregiverStatus, isNotNull);
    expect(viewModel.caregiverStatus, 'Pending');
    expect(
      result,
      'Caregiver: ${mockNameShortenerService.abbreviateLastName(mockCaregiverService.caregiverInvitation?.name ?? '')}',
    );
  },
);

评论

0赞 starball 11/21/2023
在撰写这篇回答文章时,您是否使用了任何生成式 AI?