Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 执行Assert.AreMatch()以深入比较两个对象中的属性_C#_Testing_Memcached_Assertions - Fatal编程技术网

C# 执行Assert.AreMatch()以深入比较两个对象中的属性

C# 执行Assert.AreMatch()以深入比较两个对象中的属性,c#,testing,memcached,assertions,C#,Testing,Memcached,Assertions,我正在针对我们的缓存机制编写测试,我希望确保进入缓存的内容与输出的内容相同,即所有属性都匹配。下面是一个虚构的例子,说明我希望它如何工作 [Test] public void add_client_model_member_to_cache_then_retreve() { //arrange MemcachedClient client = new MemcachedClient(); Member member = Ge

我正在针对我们的缓存机制编写测试,我希望确保进入缓存的内容与输出的内容相同,即所有属性都匹配。下面是一个虚构的例子,说明我希望它如何工作

    [Test]
    public void add_client_model_member_to_cache_then_retreve()
    {
        //arrange
        MemcachedClient client = new MemcachedClient();
        Member member = GetMember();
        client.Store(StoreMode.Set, "membertest", member);

        // act
        var result = client.Get<Member>("membertest");

        // assert
        Assert.AreMatch(result, member);
    }
上述方法可用于以下情况

    [Test]
    public void cached_result_is_same_as_original()
    {
        //arrange
        Member member = GetMember();
        client.Store(StoreMode.Set, "membertest", member);

        // act
        var result = client.Get<Member>("membertest");

        // assert
        Assert.IsTrue(AreMatch(member, result));
    }

    [Test]
    public void cached_result_is_same_as_original()
    {
        //arrange
        Member member = GetMember();
        client.Store(StoreMode.Set, "membertest", member);

        // act
        var result = client.Get<Member>("membertest");
        result.FirstName = "Result is different"; 

        // assert
        Assert.IsFalse(AreMatch(member, result));
    }
[测试]
public void缓存结果与原始结果相同
{
//安排
Member=GetMember();
client.Store(StoreMode.Set,“membertest”,member);
//表演
var result=client.Get(“membertest”);
//断言
Assert.IsTrue(AreMatch(成员,结果));
}
[测试]
public void缓存结果与原始结果相同
{
//安排
Member=GetMember();
client.Store(StoreMode.Set,“membertest”,member);
//表演
var result=client.Get(“membertest”);
result.FirstName=“结果不同”;
//断言
IsFalse(AreMatch(成员,结果));
}

当然,您可以编写一些东西来递归所有属性,并在从预期和实际属性值中获取属性值的结果上调用
object.Equals
。使用
Type.GetProperties()
获取属性本身,使用
PropertyInfo.GetValue
获取值


这会有点粗糙,但如果有必要,您可以随时调整它。

我将我使用的解决方案附加到问题(见上文)。。它可以添加到中,以支持多级属性遍历,但这不是必需的,而且很快就会变得非常混乱。
    [Test]
    public void cached_result_is_same_as_original()
    {
        //arrange
        Member member = GetMember();
        client.Store(StoreMode.Set, "membertest", member);

        // act
        var result = client.Get<Member>("membertest");

        // assert
        Assert.IsTrue(AreMatch(member, result));
    }

    [Test]
    public void cached_result_is_same_as_original()
    {
        //arrange
        Member member = GetMember();
        client.Store(StoreMode.Set, "membertest", member);

        // act
        var result = client.Get<Member>("membertest");
        result.FirstName = "Result is different"; 

        // assert
        Assert.IsFalse(AreMatch(member, result));
    }