首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仿形抛光与包装

仿形抛光与包装
EN

Stack Overflow用户
提问于 2013-05-23 12:42:37
回答 1查看 502关注 0票数 1

我使用Ploeh.SemanticComparisonLikeness作为一种有效表达映射过程的预期输出的方法(如Mark在PluralSight上的优秀高级单元测试课程中所描述的)。

我正在测试一些数据映射正确,如下所示:

代码语言:javascript
复制
[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);
}

然而,我不高兴:-

  1. 我想为相似之处应用一个名称(即命名我的.Without( y => y.ProgrammaticIdentifier)自定义)
  2. 我已经失去了与Assert.Equal( expected,actual, comparer)的对称性(但我肯定需要来自ShouldEqual的错误消息)

是否有更清晰的方法在明确的约束范围内表达这一点?

EN

回答 1

Stack Overflow用户

发布于 2013-05-23 12:56:49

如果您有一个名为AssertResemblance (类似于4)的断言助手类,而范围中有一个类似于1的static助手,您可以这样说:

代码语言:javascript
复制
var expected = new { ProductId = id, Name = name, Version = version };
AssertResemblance.Like( expected, result, WithoutProgrammaticIdentifier );

或者,如果您有像2这样的扩展方法,您可以这样做:

代码语言:javascript
复制
AssertResemblance.Like( expected,result,x=>x.WithoutProgrammaticIdentifier());

或者,您可以使用这两个世界中的最佳(不像第一个片段那样有噪音),但通过按照扩展方法(2)实现本地静态助手(如3 )来命名相似之处(通过在扩展方法中使用实际的terms )。

1

代码语言:javascript
复制
public static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( Likeness<T, NewMappingsEvent> that )
{
    return that.Without( x => x.ProgrammaticIdentifier );
}

2

代码语言:javascript
复制
static class NewMappingsEventResemblances
{
    public static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( this Likeness<T, NewMappingsEvent> that )
    {
        return that.Without( x => x.ProgrammaticIdentifier );
    }
}

3.

代码语言:javascript
复制
static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( Likeness<T, NewMappingsEvent> that )
{
    return that.WithoutProgrammaticIdentifier();
}

4.

代码语言:javascript
复制
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 );
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16714258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档