下面的测试在测试元组时会创建错误。
'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; }
}发布于 2018-10-18 20:43:31
您可能应该检查返回的对象的Id。如果引用指针不相等,尝试测试类是否相同将失败。由于框架可以使用代理,所以这并不总是正确的。
发布于 2018-10-18 20:54:55
试试FluentAssertions nuget包(参见“对象图比较”一节)。
而不是
Assert.AreEqual(test,productRepository.GetById(1))你可以这样做:
test.Should().BeEquivalentTo(productRepository.GetById(1));https://stackoverflow.com/questions/52882195
复制相似问题