gpt4 book ai didi

c# - 比较单元测试中的相似对象

转载 作者:太空狗 更新时间:2023-10-30 01:02:57 27 4
gpt4 key购买 nike

比较两个相似对象的最佳方法是什么?

给定 FlintlockDTOFlintlock:

public class FlintlockDTO
{
public string GName { get; set; }

public string SharedPropertyName { get; set; }

...
}

public class Flintlock
{
public Flintlock(FlintlockDTO inflator)
{
this.GoodName = inflator.GName;
this.SharedPropertyName = inflator.SharedPropertyName;
...
}

public string GoodName { get; private set; }

public string SharedPropertyName { get; private set; }
...
}

两个类共享 N 个属性(例如 SharedPropertyName),但 M 个属性不同,这些属性是等价的,但命名不同(例如 GoodName\GName.)

fluentassert 等工具几乎做到这一点,如果属性名称匹配,据我所知这将起作用:

flintlockDto.ShouldBeEquivalentTo(flintlock);

有没有办法在 fluentassert 或任何其他工具中巧妙地做到这一点?

理想情况下,

flintlockDto.IsTheSameAs(flintlock).WhenMapping("GName","GoodName");

最佳答案

我决定详细说明 Likeness StriplingWarrior 提到。它以 nuget package 的形式提供.

这是一个例子:

using NUnit.Framework;
using Ploeh.SemanticComparison;
using Ploeh.SemanticComparison.Fluent;

namespace Tests
{
[TestFixture]
class Tests2
{
[Test]
public void ObjectsShuldEqual()
{
var flintlockDto = new FlintlockDTO()
{
GName = "name",
AdditionalProperty = "whatever",
SharedPropertyName = "prop name"
};
var flintlock = new Flintlock(flintlockDto);

Likeness<Flintlock, FlintlockDTO> flintFlockDtoLikeness = flintlock
.AsSource().OfLikeness<FlintlockDTO>()
.With(dto => dto.GName).EqualsWhen((flintlock1, dto) => flintlock1.GoodName == dto.GName) // you can write an extension method to encapsulate it
.Without(dto => dto.AdditionalProperty);

// assert
flintFlockDtoLikeness.ShouldEqual(flintlockDto);
}
}

public class FlintlockDTO
{
public string GName { get; set; }

public string SharedPropertyName { get; set; }

public string AdditionalProperty { get; set; }
}

public class Flintlock
{
public Flintlock(FlintlockDTO inflator)
{
this.GoodName = inflator.GName;
this.SharedPropertyName = inflator.SharedPropertyName;
}

public string GoodName { get; private set; }

public string SharedPropertyName { get; private set; }
}
}

如你所见:

  • 它对具有相同名称的属性执行自动比较
  • 您可以指定不同名称的属性是否应该匹配(这个实际上开箱即用很丑陋,但您可以编写一个扩展方法来封装它)
  • 您可以指定是否不应比较属性

关于c# - 比较单元测试中的相似对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com