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