Код IT
← Каталог

Практикум WPF — тестирование API и unit-тесты — Unit-тесты ViewModel

Фрагмент из «Практикум WPF — тестирование API и unit-тесты»: Unit-тесты ViewModel.

csharp desktopencyclopediawpf-praktikum-5 embed URL статья в энциклопедии
C# main.cs
public class TaskListViewModelTests
{
    [Fact]
    public async Task AddTask_WithEmptyTitle_DoesNotCallRepository()
    {
        var repo = new Mock<ITaskRepository>();
        var vm = new TaskListViewModel(repo.Object) { NewTitle = "   " };

        await vm.AddTaskCommand.ExecuteAsync(null);

        repo.Verify(r => r.CreateAsync(It.IsAny<TaskItem>(), default), Times.Never);
    }

    [Fact]
    public async Task AddTask_ValidTitle_CallsRepositoryAndClearsTitle()
    {
        var repo = new Mock<ITaskRepository>();
        repo.Setup(r => r.CreateAsync(It.IsAny<TaskItem>(), default))
            .ReturnsAsync((TaskItem t, CancellationToken _) => t);

        var vm = new TaskListViewModel(repo.Object) { NewTitle = "Deploy" };
        await vm.AddTaskCommand.ExecuteAsync(null);

        repo.Verify(r => r.CreateAsync(It.Is<TaskItem>(x => x.Title == "Deploy"), default), Times.Once);
        Assert.Equal("", vm.NewTitle);
    }
}
public class TaskListViewModelTests
{
    [Fact]
    public async Task AddTask_WithEmptyTitle_DoesNotCallRepository()
    {
        var repo = new Mock<ITaskRepository>();
        var vm = new TaskListViewModel(repo.Object) { NewTitle = "   " };

        await vm.AddTaskCommand.ExecuteAsync(null);

        repo.Verify(r => r.CreateAsync(It.IsAny<TaskItem>(), default), Times.Never);
    }

    [Fact]
    public async Task AddTask_ValidTitle_CallsRepositoryAndClearsTitle()
    {
        var repo = new Mock<ITaskRepository>();
        repo.Setup(r => r.CreateAsync(It.IsAny<TaskItem>(), default))
            .ReturnsAsync((TaskItem t, CancellationToken _) => t);

        var vm = new TaskListViewModel(repo.Object) { NewTitle = "Deploy" };
        await vm.AddTaskCommand.ExecuteAsync(null);

        repo.Verify(r => r.CreateAsync(It.Is<TaskItem>(x => x.Title == "Deploy"), default), Times.Once);
        Assert.Equal("", vm.NewTitle);
    }
}