首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Nuget或AutoCode生成器用于比较单元测试中的多个对象

C# Nuget或AutoCode生成器用于比较单元测试中的多个对象
EN

Stack Overflow用户
提问于 2018-10-18 20:38:03
回答 2查看 118关注 0票数 0

下面的测试在测试元组时会创建错误。

'Assert.AreEqual(test,productRepository.GetById(1))‘抛出了一个“NUnit.Framework.AssertionException”类型的例外

下面介绍的许多解决方案都需要为每个模型设置一个覆盖等于函数。这对于在项目中使用200+模型的软件来说是很难维护的。是否有任何Nuget包或自动代码生成器将为所有200种型号创建相等的覆盖方法?

这些都要求覆盖

NUnit测试

代码语言:javascript
复制
[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);
    }

仓库

代码语言:javascript
复制
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);

    }
}

模型

代码语言:javascript
复制
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; }
}
EN

回答 2

Stack Overflow用户

发布于 2018-10-18 20:43:31

您可能应该检查返回的对象的Id。如果引用指针不相等,尝试测试类是否相同将失败。由于框架可以使用代理,所以这并不总是正确的。

票数 0
EN

Stack Overflow用户

发布于 2018-10-18 20:54:55

试试FluentAssertions nuget包(参见“对象图比较”一节)。

而不是

代码语言:javascript
复制
Assert.AreEqual(test,productRepository.GetById(1))

你可以这样做:

代码语言:javascript
复制
test.Should().BeEquivalentTo(productRepository.GetById(1));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52882195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档