using Moq; using WpfViewModelFirst.Part1; using WpfViewModelFirst.Part2; namespace WpfViewModelFirst.Tests { public class MainWindowViewModelTests { [Fact] public void Part1WillSetPart1ViewModelToCurrentViewModel() { Part1ViewModel part1ViewModel = new(() => Task.CompletedTask); Mock mockViewModelFactory = new Mock(); mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny>())) .Returns(part1ViewModel); MainWindowViewModel main = new(mockViewModelFactory.Object); main.Part1(null); Assert.Equal(part1ViewModel, main.CurrentViewModel); } [Fact] public async Task Part1CallbackIsSuccessfull() { TaskCompletionSource taskCompletionSource = new TaskCompletionSource(); Mock mockViewModelFactory = new Mock(); mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny>())) .Returns(() => new Part1ViewModel(() => { taskCompletionSource.SetResult(true); return Task.CompletedTask; })) .Callback>(c => { c.Invoke().ContinueWith(t => { taskCompletionSource.SetResult(true); }); }) ; mockViewModelFactory.Setup(vmf => vmf.GetPart2ViewModel()) .Returns(() => new Part2ViewModel()); MainWindowViewModel main = new(mockViewModelFactory.Object); main.Part1(null); await taskCompletionSource.Task.WaitAsync(CancellationToken.None); Assert.IsType(main.CurrentViewModel); } Func Part1Func() { return () => Task.CompletedTask; } } }