簡體   English   中英

C#Nuget或AutoCode Generator在單元測試中比較多個對象

[英]C# Nuget or AutoCode Generator to Compare Multiple Objects in Unit Testing

當測試元組時,以下測試會產生錯誤。

'Assert.AreEqual(test,productRepository.GetById(1))'引發了'NUnit.Framework.AssertionException'類型的異常

下面介紹的許多解決方案都要求每個模型都具有覆蓋等於功能。 對於項目中具有200多個模型的軟件,這很難維護。 是否有任何Nuget軟件包或自動代碼生成器將為所有200個模型創建相等替代方法?

這些都要求覆蓋

NUnit測試

[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; }
}

您可能應該檢查返回對象的ID。 如果引用指針不相等,則嘗試測試類是否相同將失敗。 由於框架可以使用代理,因此並非總是如此。

試用FluentAssertions nuget包(請參閱“ 對象圖比較 ”部分)。

代替

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

您可以執行以下操作:

test.Should().BeEquivalentTo(productRepository.GetById(1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM