我使用Ploeh.SemanticComparison的Likeness作为一种有效表达映射过程的预期输出的方法(如Mark在PluralSight上的优秀高级单元测试课程中所描述的)。
我正在测试一些数据映射正确,如下所示:
[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<NewMappingsEvent>()
.Without( y => y.ProgrammaticIdentifier)
.ShouldEqual(result);
}然而,我不高兴:-
.Without( y => y.ProgrammaticIdentifier)自定义)Assert.Equal( expected,actual, comparer)的对称性(但我肯定需要来自ShouldEqual的错误消息)是否有更清晰的方法在明确的约束范围内表达这一点?
发布于 2013-05-23 12:56:49
如果您有一个名为AssertResemblance (类似于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)实现本地静态助手(如3 )来命名相似之处(通过在扩展方法中使用实际的terms )。
1
public static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( Likeness<T, NewMappingsEvent> that )
{
return that.Without( x => x.ProgrammaticIdentifier );
}2
static class NewMappingsEventResemblances
{
public static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( this Likeness<T, NewMappingsEvent> that )
{
return that.Without( x => x.ProgrammaticIdentifier );
}
}3.
static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( Likeness<T, NewMappingsEvent> that )
{
return that.WithoutProgrammaticIdentifier();
}4.
static class AssertResemblance
{
public static void Like<T, T2>( T expected, T2 actual )
{
Like( expected, actual, x => x );
}
public static void Like<T, T2>( T expected, T2 actual, Func<Likeness<T, T2>, Likeness<T, T2>> configureLikeness )
{
var likeness = expected.AsSource().OfLikeness<T2>();
configureLikeness( likeness ).ShouldEqual( actual );
}
}https://stackoverflow.com/questions/16714258
复制相似问题