Как выполнить модульное тестирование DelegateCommand, который вызывает асинхронные c методы с помощью Task.Delay (1) - PullRequest
0 голосов
/ 24 апреля 2020

Чтобы устранить проблему, связанную с тем, что Xamarin формирует SlideOverKit, SlidemenuView (Hidemenu, упомянутый в коде) не закрывается быстро при нажатии любой опции в нем, поэтому я использовал Task.Delay(1) в следующем коде. Это исправляет проблему закрытия slidemenuView.

Однако, при этом мой модульный тест не пройден

Может ли кто-нибудь мне помочь?

[Test]        
public void NavigateCommand_SelectingOtherWorkdOrderPage_ShouldNavigateToOtherWorkOrderPage()
{
    //Arrange
    string _selectedMenuItem = ServiceTechLocalization.HamburgerMenu_OtherAssignments;

    //Act
    _mockNavigationMenuViewModel.NavigateCommand.Execute(_selectedMenuItem);

    //Assert
    _mockTeamNavigationService.Received().PushLandingPage(false);

}

private DelegateCommand<string> _navigateCommand;
public DelegateCommand<string> NavigateCommand => _navigateCommand ?? (_navigateCommand = new DelegateCommand<string>(async (a) => await Navigate(a)));

public async Task Navigate(string selectedItem)
{   
    HideMenu?.Invoke();
    await Task.Delay(1);
    if (ServiceTechLocalization.HamburgerMenu_OpenAssignments.Equals(selectedItem))
    {
        Telemetry.TrackEvent(Constants.TelemetryKeys.Modules.Navigation, Constants.TelemetryKeys.HamburgerMenu, "OpenAssignmentsTapped");
        await _teamNavigationService.PushLandingPage();
        return;
    }
    elseif (ServiceTechLocalization.HamburgerMenu_OtherAssignments.Equals(selectedItem))
    {
        Telemetry.TrackEvent(Constants.TelemetryKeys.Modules.Navigation, Constants.TelemetryKeys.HamburgerMenu, "OtherAssignmentsTapped");
        await _teamNavigationService.PushLandingPage(false);
        return;
    }
}

0

Если я изменю мой DelegateCommand, как показано ниже , это работает.

ОДНАКО Я НЕ ДОЛЖЕН ИЗМЕНИТЬ КОД ПРОИЗВОДСТВА ДЛЯ ТЕСТИРОВАНИЯ ЕДИНИЦЫ.

ЛЮБАЯ ИДЕЯ, ЧТОБЫ ИСПРАВИТЬ ЭТО?

private DelegateCommand<string> _navigateCommand;
        public DelegateCommand<string> NavigateCommand => _navigateCommand ?? (_navigateCommand = new DelegateCommand<string>((a) => Task.WaitAll(Navigate(a)));

Это ИСПРАВЛЯЕТСЯ, если я используйте Task.Delay в коде модульного теста, но я не знаю, было ли это правильно или нет. ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ

[Test]        
public async Task NavigateCommand_SelectingOtherWorkdOrderPage_ShouldNavigateToOtherWorkOrderPage()
{
    //Arrange
    string _selectedMenuItem = ServiceTechLocalization.HamburgerMenu_OtherAssignments;

    //Act
    _mockNavigationMenuViewModel.NavigateCommand.Execute(_selectedMenuItem);
await Task.Delay(10);
    //Assert
    _mockTeamNavigationService.Received().PushLandingPage(false);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...