Sto cercando di unit test del metodo LoginExecute delle seguenti ViewModel utilizzando MOQNullReferenceException quando si chiama il metodo asincrono dell'oggetto deriso
public class LoginViewModel : ViewModelBase, ILoginViewModel
{
INavigationService navigationService;
IDialogService dialogService;
IAdminService adminService;
public RelayCommand LoginCommand { get; set; }
private string _productID;
public string ProductID
{
get { return _productID; }
set
{
_productID = value;
RaisePropertyChanged("ProductID");
}
}
public LoginViewModel(INavigationService navigationService, IDialogService dialogService, IAdminService adminService)
{
this.navigationService = navigationService;
this.dialogService = dialogService;
this.adminService = adminService;
InitializeCommands();
}
private void InitializeCommands()
{
LoginCommand = new RelayCommand(() => LoginExecute());
}
public async Task LoginExecute()
{
await this.navigationService.TestMethod();
this.navigationService.Navigate(typeof(ITherapistsViewModel));
}
public void Initialize(object parameter)
{
}
}
L'INavigationService assomiglia a questo
public interface INavigationService
{
Frame Frame { get; set; }
void Navigate(Type type);
void Navigate(Type type, object parameter);
Task TestMethod();
void GoBack();
}
Il mio test si presenta come questo
[TestMethod()]
public async Task LoginCommandTest()
{
var navigationService = new Mock<INavigationService>();
var dialogService = new Mock<IDialogService>();
var adminService = new Mock<IAdminService>();
LoginViewModel loginVM = new LoginViewModel(navigationService.Object, dialogService.Object, adminService.Object);
await loginVM.LoginExecute();
//Asserts will be here
}
Il problema è che quando la linea
await this.navigationService.TestMethod();
viene chiamato l'eccezione NullReferenceException viene generata. Se lo stesso metodo viene chiamato senza "attendere", funziona come previsto. Funziona anche se il metodo viene chiamato nella normale implementazione di NavigationService (non una simulazione). Potresti per favore aiutarmi a capire perché la chiamata al metodo asincrono sta producendo NullReferenceException?
Questo numero esatto, questa mattina, mi ha tolto i capelli per ore. –