C # Nuget или AutoCode Generator для сравнения нескольких объектов в модульном тестировании - PullRequest
0 голосов
/ 18 октября 2018

Следующий тест создает ошибку при тестировании кортежей.

'Assert.AreEqual (test, productRepository.GetById (1))' вызвал исключение типа 'NUnit.Framework.AssertionException'

Для многих решений, представленных ниже, требуетсяпереопределение равно функции для каждой модели.Это очень трудно поддерживать для программного обеспечения с 200+ моделями в проекте.Существует ли какой-либо пакет Nuget или генератор автоматического кода, который создаст методы переопределения равенства для всех 200 моделей?

Все они просят переопределить

NUnit Test

[Test]
public void TestProducts()
{
    var options = new DbContextOptionsBuilder<ElectronicsContext>()
        .UseInMemoryDatabase(databaseName: "Products Test")
        .Options;

    using (var context = new ElectronicsContext(options))
    {
        //DbContextOptionsBuilder<ElectronicsContext> context = new DbContextOptionsBuilder<ElectronicsContext>()

        context.Product.Add(new Product { ProductId = 1, ProductName = "TV", ProductDescription = "TV testing", ImageLocation = "test" });
        context.SaveChanges();
        ProductRepository productRepository = new ProductRepository(context);
        var test = new Product
            {ProductId = 1, ProductName = "TV", ProductDescription = "TV testing", ImageLocation = "test"};

       **//This works**
        Assert.AreEqual("TV", productRepository.GetById(1).ProductName);

       **//This Fails**
        Assert.AreEqual(test,productRepository.GetById(1));

       **//This Fails**
        Assert.AreEqual(Object.Equals(test, productRepository.GetById(1)), 1);
    }

Хранилище

public class ProductRepository : IProductRepository<Product>
{
    private readonly ElectronicsContext _context;
    public ProductRepository(ElectronicsContext context)
    {
        _context = context;
    }

    public IEnumerable<Product> GetAllProduct()
    {
        return _context.Product.ToList();
    }

    public IQueryable<Product> Products => _context.Product;

    public Product GetById(int productid)
    {
        return _context.Product.Find(productid);

    }
}

Модель

public partial class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public string ProductDescription { get; set; }
    public string ImageLocation { get; set; }

    public int? ProductCategoryId { get; set; }
    public virtual ProductCategory ProductCategory { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Попробуйте FluentAssertions пакет nuget (см. Раздел " Сравнение графов объектов ").

Вместо

Assert.AreEqual(test,productRepository.GetById(1))

Вы можете сделать что-то вроде:

test.Should().BeEquivalentTo(productRepository.GetById(1));
0 голосов
/ 18 октября 2018

Вероятно, вы должны проверить Id возвращаемого объекта.Попытка проверить, что классы одинаковы, потерпит неудачу, если ссылочные указатели не равны.Поскольку фреймворк может использовать прокси, это не всегда будет верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...