相似性 – 抛光和包装
我正在使用Ploeh.SemanticComparison
的Likeness
来有效地表达映射过程的预期输出(如Mark Seemann在PluralSight上的优秀高级unit testing课程中所述 )。
我正在测试一些已正确映射的数据,如下所示:
[Theory, AutoData] static void ShouldYieldIdentifierUpdatedEvent( Vendor sut, string name, string version, Guid id ) { var result = sut.SyncProduct( name, version, id ); var expected = new { ProductId = id, Name = name, Version = version }; expected.AsSource().OfLikeness() .Without( y => y.ProgrammaticIdentifier) .ShouldEqual(result); }
但是,我不高兴: –
- 我想将名称应用于相似性(即命名我的
.Without( y => y.ProgrammaticIdentifier)
自定义) - 我已经失去了与
Assert.Equal( expected,actual, comparer)
的对称性Assert.Equal( expected,actual, comparer)
(但我肯定需要来自ShouldEqual
的错误消息)
是否有更清晰的方式在表达的约束内表达这一点?
如果你有一个名为AssertResemblance
的Assertion助手类(如[4]),并且在范围内有一个像[1]这样的static
助手,你可以这样说:
var expected = new { ProductId = id, Name = name, Version = version }; AssertResemblance.Like( expected, result, WithoutProgrammaticIdentifier );
或者,如果你有像[2]这样的扩展方法,你可以这样做:
AssertResemblance.Like( expected,result,x=>x.WithoutProgrammaticIdentifier());
或者你可以通过在扩展方法([2])方面实现本地静态助手来获得两个世界中最好的(没有第一个片段中的噪声),但命名相似性(通过在扩展方法中使用实际的impl)如[3]中所述。
[1]
public static Likeness WithoutProgrammaticIdentifier( Likeness that ) { return that.Without( x => x.ProgrammaticIdentifier ); }
[2]
static class NewMappingsEventResemblances { public static Likeness WithoutProgrammaticIdentifier( this Likeness that ) { return that.Without( x => x.ProgrammaticIdentifier ); } }
[3]
static Likeness WithoutProgrammaticIdentifier( Likeness that ) { return that.WithoutProgrammaticIdentifier(); }
[4]
上述就是C#学习教程:相似性 – 抛光和包装分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
static class AssertResemblance { public static void Like( T expected, T2 actual ) { Like( expected, actual, x => x ); } public static void Like( T expected, T2 actual, Func, Likeness> configureLikeness ) { var likeness = expected.AsSource().OfLikeness(); configureLikeness( likeness ).ShouldEqual( actual ); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/983951.html