@Misuta

Как правильно записать Guid в юнит тесте?

namespace PC_Builder.Tests.ControllerTests
{
    [TestClass]
    public class CartControllerTests
    {
        [TestMethod]
        public void Can_Use_Repository()
        {
            // arrange
            Mock<ApplicationContext> mock = new Mock<ApplicationContext>();
            mock.Setup(m => m.Products).Returns((new Product[]
            {
                new Product {
                    Name = "Intel",
                    Category = "CPU",
                    Price = 234, 
                    ProductCounter = 1,
                    Subtotal = 234,
                    ProductId = 0x5EC9C84E842D4467AF277B50413F9EE6,
                    UserLogin = "user" }
            }));
           

            CartController controller = new CartController(mock.Object);

            // act

            // assert
            
        }
    }
}


У ProductId тип данных Guid, как правильно установить его значение? Пишет ошибку Integral constant is too large, как будто я устанавливаю интовое значение.
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега ASP.NET
Токсичный шарпист
Какой тип у ProductId? Если это Guid, то смотри какие у него конструкторы есть.
Проще всего через Guid.Parse.

PS:
А DbContext мокать не нужно. Используй вместо этого EF Core inmemory, либо Sqlite с размещением в оперативной памяти.

Будет что-то типа:
var conn = new SqliteConnection("DataSource=:memory:");
var options = new DbContextOptionsBuilder<ApplicationContext>()
   .UseSqlite(conn)
   .Options;

using var dbContext = new ApplicationContext(options);
dbContext.Products.Add(new Product { /*...*/});
dbContext.SaveChanges();

var controller = new CartController(dbContext);
// ...


PPS:
Если ты хочешь тестировать контроллеры - значит ты что-то делаешь не так. Возможны два варианта:

1. Ты наговнокодил и затолкал бизнес-логику в контроллеры.
Если так, то выноси логику в сервисы и делай так, чтобы контроллер зависел от сервисов.

2. Тебе на самом деле нужны интеграционные / api-тесты / e2e-тесты. В таком случае тебе нужно не контроллер конструировать, а поднимать сервер и тестировать при помощи http-запросов. В таком случае следует ещё и по пути полноценную СУБД поднимать, а не мок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы