16

私は NSubstitute をよく使います。そして、私はそれが大好きです。

私はちょうどAutoFixtureを調べています。それは素晴らしいようです!

NSubstitute の AutoFixtureを見て、Moq でこの機能の使用方法の例をいくつか見ました。

しかし、それを NSubstitute に変換することはできないようです。

私はこれを試しました:

var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());  
var addDest = Substitute.For<IPerson>();

使用:

public interface IPersonEntity
{    
   int ID { get; set; }
   string FirstName { get; set;}
   string LastName { get; set;}
   DateTime DateOfBirth { get; set; }
   char Gender { get; set; }    
}

そして、オブジェクトを取得しましたが、どのプロパティも設定されていません (AutoFixture のポイントのようなものです)。

私も試しました:

var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
var result = fixture.Create<IPersonEntity>();

これにより、プロパティが設定されていないオブジェクトも得られました。(クラスで上記を行うとPersonEntity、プロパティはすべて設定されます。)

これを機能させる方法があると確信していますが、見つけられないようです。

では、上記の私のIPersonEntityインターフェースを考えると、AutoFixture と NSubstitute を使用して、入力された IPersonEntity オブジェクトを提供する方法を知っている人はいますか?

4

2 に答える 2

21

Fixtureでインスタンスをカスタマイズする代わりに、AutoNSubstituteCustomization以下のカスタマイズを使用できます。

var fixture = new Fixture().Customize(
    new AutoPopulatedNSubstitutePropertiesCustomization());

var result = fixture.Create<IPersonEntity>();
// -> All properties should be populated now.

は次のAutoPopulatedNSubstitutePropertiesCustomizationように定義されます。

internal class AutoPopulatedNSubstitutePropertiesCustomization
    : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.ResidueCollectors.Add(
            new Postprocessor(
                new NSubstituteBuilder(
                    new MethodInvoker(
                        new NSubstituteMethodQuery())),
                new AutoPropertiesCommand(
                    new PropertiesOnlySpecification())));
    }

    private class PropertiesOnlySpecification : IRequestSpecification
    {
        public bool IsSatisfiedBy(object request)
        {
            return request is PropertyInfo;
        }
    }
}

との違いAutoNSubstituteCustomizationは、上記のカスタマイズも、要求された型のすべてのパブリック プロパティの値を自動的に設定するインスタンスで装飾されていることです。Postprocessor

参考文献

上記のソリューションは、 Mark Seemannによる次のブログ記事に触発されています。

于 2013-08-20T23:15:08.913 に答える