Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相似性-抛光和包装_C#_Unit Testing_Xunit_Autofixture_Semantic Comparison - Fatal编程技术网

C# 相似性-抛光和包装

C# 相似性-抛光和包装,c#,unit-testing,xunit,autofixture,semantic-comparison,C#,Unit Testing,Xunit,Autofixture,Semantic Comparison,我使用Ploeh.SemanticComparison的相似性作为一种有效表达映射过程预期输出的方法(如中所述) 我正在测试一些数据是否正确映射,如下所示: [Theory, AutoData] static void ShouldYieldIdentifierUpdatedEvent( Vendor sut, string name, string version, Guid id ) { var result = sut.SyncProduct( name, version, id

我使用
Ploeh.SemanticComparison
相似性
作为一种有效表达映射过程预期输出的方法(如中所述)

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

[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);
}
[理论,自动数据]
静态void ShouldYieldIdentifierUpdatedEvent(供应商sut、字符串名称、字符串版本、Guid id)
{
var result=sut.SyncProduct(名称、版本、id);
var应为新的{ProductId=id,Name=Name,Version=Version};
应为likenness()的.AsSource()
.Without(y=>y.ProgrammaticIdentifier)
.ShouldEqual(结果);
}
然而,我并不高兴:-

  • 我想对相似性应用一个名称(即名称my
    ,而不使用(y=>y.ProgrammaticIdentifier)
    customization)
  • 我已经失去了与
    Assert.Equal(预期、实际、比较器)
    的对称性(但我确实需要
    ShouldEqual
    的错误消息)

  • 是否有一种更简洁的方式在所表达的约束中表达这一点?

    如果您有一个名为
    assertsimilance
    (如[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])来命名相似性(通过在扩展方法中使用实际的impl)


    [1]

    无程序标识符的公共静态相似性(相似性)
    {
    返回.Without(x=>x.ProgrammaticIdentifier);
    }
    
    [2]

    静态类newmappingseventerembrance
    {
    不带程序标识符的公共静态相似性(该相似性)
    {
    返回.Without(x=>x.ProgrammaticIdentifier);
    }
    }
    
    [3]

    无程序标识符的静态相似性(相似性)
    {
    返回该.WithoutProgrammaticIdentifier();
    }
    
    [4]

    静态类资产相似性
    {
    公共静态空隙(预期为T,实际为T2)
    {
    Like(预期的,实际的,x=>x);
    }
    公共静态void-Like(预期为T,实际为T2,函数配置相似)
    {
    var likess=期望的.AsSource().OfLikeness();
    配置相似性(相似性)。应相等(实际);
    }
    }
    
    如果您有一个名为
    assertsimilance
    (如[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])来命名相似性(通过在扩展方法中使用实际的impl)


    [1]

    无程序标识符的公共静态相似性(相似性)
    {
    返回.Without(x=>x.ProgrammaticIdentifier);
    }
    
    [2]

    静态类newmappingseventerembrance
    {
    不带程序标识符的公共静态相似性(该相似性)
    {
    返回.Without(x=>x.ProgrammaticIdentifier);
    }
    }
    
    [3]

    无程序标识符的静态相似性(相似性)
    {
    返回该.WithoutProgrammaticIdentifier();
    }
    
    [4]

    静态类资产相似性
    {
    公共静态空隙(预期为T,实际为T2)
    {
    Like(预期的,实际的,x=>x);
    }
    公共静态void-Like(预期为T,实际为T2,函数配置相似)
    {
    var likess=期望的.AsSource().OfLikeness();
    配置相似性(相似性)。应相等(实际);
    }
    }
    
    Hi Ruben,使用当前的API,这是唯一的方法。在不久的将来,虽然可以使用自动映射库(例如AutoMapper),这样您就可以使用您选择的自动映射库来创建自定义项、配置文件、配置等。@NikosBaxevanis我一直在扫描该线程,很明显这里正在进行一些有益的事情,但请原谅我的双关语,对于我来说,这在很大程度上是希腊语:P我喜欢
    Ploeh.SemanticComparison
    中的语法(也就是说,我还没有遇到一个我还不能扭曲以适应我的金锤的案例:D)Hi Ruben,使用当前的API,这是唯一的方法。在不久的将来,虽然可以使用自动映射库(例如AutoMapper),这样您就可以使用您选择的自动映射库来创建自定义项、配置文件、配置等。@NikosBaxevanis我一直在扫描该线程,很明显这里正在进行一些有益的事情,但请原谅我的双关语,对于我来说,这在很大程度上是希腊语:P,我喜欢
    Ploeh.SemanticComparison
    中的语法(也就是说,我还没有遇到一个案例,我还不能扭曲以适应我的金锤:D)
    static Likeness<T, NewMappingsEvent> WithoutProgrammaticIdentifier<T>( Likeness<T, NewMappingsEvent> that )
    {
        return that.WithoutProgrammaticIdentifier();
    }
    
    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 );
        }
    }