【问题标题】:How to write a method in c# to test if two entity type objects are equal or not in a test class? [duplicate]如何在 C# 中编写一个方法来测试两个实体类型对象在测试类中是否相等? [复制]
【发布时间】:2019-08-27 23:47:39
【问题描述】:

我正在编写一个测试方法来检查两个实体对象是否相等。我还需要比较这两个实体对象的每一项。

public class DatabaseServiceTestBase<TEntity, TContext, TService>
    where TEntity : IBaseModel<Guid>
    where TContext : DatabaseContext
    where TService : IDatabaseService<TEntity, Guid>
{
    public abstract class ContextBase
    {
        public TService Service { get; set; }

        public TContext Context { get; }

        public ContextBase(string databaseName)
        {
            var options = new DbContextOptionsBuilder<TContext>()
                .UseInMemoryDatabase(databaseName: databaseName)
                .Options;

            Context = (TContext)Activator.CreateInstance(typeof(TContext), new object[] { options });
        }


        // how to implement AssertObjectsEqual method?
        public virtual void AssertObjectsEqual(TEntity expected, TEntity actual)
        {

        }                   

    }
}

如何实现AssertObjectsEqual 方法?我是泛型类型的新手。

【问题讨论】:

  • 在同一个instance中相等,还是在共享同一个data中相等?
  • 等同于同一个实例
  • expected == actualobject.ReferenceEquals(expected, actual) ?
  • @TheGeneral 你认为下面的代码也检查实体中的项目吗?请帮忙。公共虚拟无效 AssertObjectsEqual(TEntity 预期,TEntity 实际) { object.ReferenceEquals(预期,实际) }

标签: c# asp.net-core


【解决方案1】:

如果你需要结构比较,那么你可以使用现有的框架。

this thread 中查找更多选项。

【讨论】:

    【解决方案2】:

    你可以使用

    expected == actual 
    

    object.ReferenceEquals(expected, actual)
    

    你认为下面的代码也会检查实体中的项目吗?

    相同的实例共享相同的引用到相同的项目。这就像问两个桶是否相同。如果桶相同,则 bucket 中的 items 必须相同。无论它是多么嵌套,你都不能拥有包含不同项目的同一个桶。

    【讨论】:

    • 非常感谢您的帮助@TheGeneral
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多