Csharp/C#教程:相似性 – 抛光和包装分享


相似性 – 抛光和包装

我正在使用Ploeh.SemanticComparisonLikeness来有效地表达映射过程的预期输出(如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); } 

但是,我不高兴: –

  1. 我想将名称应用于相似性(即命名我的.Without( y => y.ProgrammaticIdentifier)自定义)
  2. 我已经失去了与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

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐