Autofixture: Zugriff auf das Gerät, das durch das AutoData-Attribut erstellt wurde.

Erstellt am 25. Apr. 2018  ·  7Kommentare  ·  Quelle: AutoFixture/AutoFixture

Hi,
Im Moment kann ich nur so auf das Gerät zugreifen.

[Theory, AutoData]
public void Dummy(string dummy)
{
    MethodBase method = MethodBase.GetCurrentMethod();
    IFixture fixture = method.GetCustomAttribute<AutoDataAttribute>().Fixture;


    Assert.Equal(dummy, dummy);
}

Und ich erhalte die Warnung 'AutoDataAttribute.Fixture' ist veraltet.

Gibt es eine bessere Möglichkeit, auf das im AutoData-Attribut erstellte Gerät zuzugreifen? Ich möchte Parameter und manuelle Erstellung und Injektion mischen.
Vielen Dank

question

Hilfreichster Kommentar

Ja, es ist wirklich ein besserer Weg.

Kannst du das in das AutoData-Wiki stellen?
Ich habe überall gesucht, um herauszufinden, wie das geht.
Hätte nicht gedacht, dass der IOC-Container das IFixture registriert hat.

Danke vielmals!

Alle 7 Kommentare

Hi,

Sicher, bitten Sie einfach das zugrunde liegende Gerät, die Instanz IFixture aufzulösen, und es wird self zurückgegeben:

c# [Theory, AutoData] public void Dummy(string dummy, IFixture fixture) { }

Funktioniert es bei dir? :zwinkern:

Ja, es ist wirklich ein besserer Weg.

Kannst du das in das AutoData-Wiki stellen?
Ich habe überall gesucht, um herauszufinden, wie das geht.
Hätte nicht gedacht, dass der IOC-Container das IFixture registriert hat.

Danke vielmals!

Warum versuchen Sie, sich beim IoC für das Fixture zu registrieren? Meiner Erfahrung nach wird es nie gebraucht

Vor allem, um Testmethodenparameter für komplexe wiederkehrende Schnittstellenkonfigurationen zu minimieren.

[Theory, AutoMoqData]
public void Dummy(IFixture fixture, [Frozen]Mock<IComplexInterfaceWith30SubInterfaces> needed, TestClass sut)
{
    //This will add interfaces setups for needed by retrieving them from the IoC container or by property access.
    SetupInterfaces(fixture, needed);
    //We can now use needed injected in sut.
}

Ich habe ein einfacheres Beispiel

Ich bevorzuge das

[Theory, AutoMoqData]
public void Dummy(IFixture fixture)
{
    Assert.Equal(String.Empty, String.Empty);
}

darüber

[Fact]
public void Dummy2()
{
    IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());

    Assert.Equal(String.Empty, String.Empty);
}

Vor allem, um Testmethodenparameter für komplexe wiederkehrende Schnittstellenkonfigurationen zu minimieren.

Ich stimme zu, ich habe die ähnliche Verwendung in Tests. Der einzige Unterschied besteht darin, dass ich es vorziehe, diesen sich wiederholenden Hilfsmethoden When() , sodass der Test wie folgt aussieht:

c# public void Test([Frozen] IProvider provider, ISut sut, IFixture fixture) { // arrange WhenProviderReturnsOnlyInitializedEntities(provider, fixture); ..... }

Aber im Grunde ist die Idee immer noch die gleiche 😉

Schließen Sie diesen, da keine weiteren Aktionen erforderlich sind.

Kannst du das in das AutoData-Wiki stellen?

@malylemire1 Ich werde in Zukunft irgendwo eine Doc-Site erstellen. Fühlen Sie sich jedoch frei, dieses Beispiel zu unserem Wiki hinzuzufügen 😅

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

DeafLight picture DeafLight  ·  5Kommentare

gtbuchanan picture gtbuchanan  ·  3Kommentare

JoshKeegan picture JoshKeegan  ·  6Kommentare

ploeh picture ploeh  ·  7Kommentare

zvirja picture zvirja  ·  4Kommentare