Как выполнить проверочный тест на валидаторе на странице Razor Asp.net?

#c# #asp.net #integration-testing #razor-pages #xunit

Вопрос:

Я пытаюсь начать с тестов для FoodValidator. Мне нужна помощь в понимании того, что это за фабрика и что это за фабрика.Услуги.GetService(); делает. И несколько примеров, чтобы показать, как следует проводить тестирование.

 using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
using Xunit;

namespace Food.Project.Tests
{
    public class WebApplicationTests : IClassFixture<WebApplicationFactory<Startup>>
    {
        private readonly WebApplicationFactory<Startup> factory;

        public WebApplicationTests(WebApplicationFactory<Startup> factory)
        {
            this.factory = factory;
        }

        [Fact]
        public void IFoodItemValidatorTests()
        {
            // itemValidator will be null if it is not registered in the DI container
            var itemValidator = factory.Services.GetService<IFoodItemValidator>();
  
            Assert.NotNull(itemValidator);
        }
    }
}
 

FoodValidator.cs

 public class FoodItemValidator : IFoodItemValidator
    {

        private List<string> errors { get; set; } = new List<string>();

        public string[] IsValid(FoodItem foodItem)
        {

        
            if (string.IsNullOrWhiteSpace(foodItem.Name))
            {
                errors.Add("Name should contain a value and not a space.");

            }
            if (string.IsNullOrWhiteSpace(foodItem.Description))
            {
                errors.Add(" Description should contain a value and not a space.");
            }

            if (foodItem.Price <= 0)
            {
                errors.Add("Price should be greater than 0.n ");
            }
            return errors.ToArray();
        }
    }
}
 

И IFoodItemValidator:

 namespace Food.Project
{
    public interface IFoodItemValidator
    {
        string[] IsValid(FoodItem foodItem);
    }
}
 

Валидатор должен проверить, что имя и описание элемента не являются пустыми и не содержат пробелов. Число должно быть больше 0.

 public class FoodItem
    {

        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public double Price { get; set; }
        public int CookTime { get; set; }

        public string Path { get; set; }


    }
 

Комментарии:

1. Вы читали официальную документацию по интеграционному тестированию от Microsoft?. Существует хорошее объяснение того, что делает WebApplicationFactory.

2. @Marco да, но мне это трудно из-за моего знания языка