我有这样的事情:
public class ModelEntity : Entity
{
public override int Id { get; set; }
public string FileName { get; set; }
}
public class DataTransferObject
{
public int Id { get; set; }
public string FileName { get; set; }
}
我想做这样的事情:
var model = _fixture.Create<ModelEntity>();
var dto = _fixture.Create<DataTransferObject>().FillWith(model);
现在我正在做以下事情,但我不确定这是否是正确的方法
var model = _fixture.Create<ModelEntity>();
var dto = model.AsSource().OfLikeness<DataTransferObject>().CreateProxy();
答案 0 :(得分:1)
AutoFixture没有这样的功能,但我认为可以从中学到更好的东西:
AutoFixture最初是作为测试驱动开发(TDD)的工具而构建的,TDD完全是关于反馈。本着GOOS的精神,你应该听听你的测试。如果测试难以编写,则应考虑API设计。 AutoFixture倾向于放大这种反馈,也可能就是这种情况。
听起来您需要能够使用DataTransferObject
实例中的值填充ModelEntity
。这是否表明某种映射会成为您API的重要补充?
根据这些类型的耦合方式,您可以考虑向ModelEntity
类添加投影方法:</ p>
public class ModelEntity : Entity
{
public override int Id { get; set; }
public string FileName { get; set; }
public DataTransferObject ToDataTransferObject()
{
return new DataTransferObject
{
Id = this.Id,
FileName = this.FileName
};
}
}
然而,这种方法的缺点是它将这两种类型相互耦合。
如果您发现不受欢迎,您可以改为引入专用的Mapper服务,该服务可以将ModelEntity
实例映射到DataTransferObject
对象 - 反之亦然。
如果出于某种不可思议的原因,您不想将这样的Mapper引入您的被测系统,您仍然可以将其作为可重复使用的服务添加到您的测试项目中。
如果您不想自己编写这样的Mapper,可以考虑使用AutoMapper这样的目的。