none
Fakes Framework

    Frage

  • Hi,

    ich wollte für meine UnitTests das Microsoft Fakes Framework nutzen. Eine Klasse erwartet in ihrem ctor ein IEtwas. Die IEtwas ist als internal deklariert. In meinem Testprojekt wird mir der Stub für das Interface erst angeboten, wenn ich deren Sichtbarkeit auf public setze, was ich nicht möchte. Kann ich mit dem Fakes Framework von den internen Interfaces keine Stubs erstellen?

    Was mir zudem unangenehm aufgefallen ist, ist die Namensgebung der Methoden, die ich generiert werden. Die Typen der Übergabeparameter werden an den Namen angehängt. Kann dies irgendwo geändert werden?

    Wenn ich meiner zu testenden Assembly neue Interfaces definiert werden, muss ich dann die Fakes-Assembly in dem Testprojekt immer wieder löschen und neu generieren lassen?
    Gibt es die Möglichkeit der Aktualisierung?

    Danke
    Christian


    Montag, 19. August 2013 11:43

Antworten

  • Hallo Christian,

    die Fakes Assemblies werden bei mir automatisch bei einem Rebuild der Solution oder der Testassembly neu gebaut, ich muss nichts löschen und neu generieren.

    Die Internal Methoden kannst du dank "InternalsVisibleTo" testen. Allerdings benötigst du zwei Einträge. Du musst von deiner zu testenden Assembly die Internals für die Testassembly und die Fakes Assembly frei geben (in der AssemblyInfo.cs)

    [assembly: InternalsVisibleTo("WpfDemo.ViewModel.UnitTests")]
    [assembly: InternalsVisibleTo("WpfDemo.ViewModel.Fakes")]

    Siehe auch MSDN Doku

    http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

    Funktioniert wunderbar. Falls deine Assemblies signiert sind den Key nicht vergessen.

    Ob man auf die Codegenerierung in Sachen Namensgebung Einfluss nehmen kann weiß ich aktuell nicht. Oben im Link findest du auch eine Übersicht über die Namensrichtlinien der generierten Fakes Assmblies.

    Hier noch ein kostenloses eBook was dich in Fakes vielleicht noch etwas weiter bringt:

    http://vsartesttoolingguide.codeplex.com/releases/view/102290

    @Björn: Um VS2010 und die Funktion Unit Test generieren ging es bei den Fragen nicht ;-)

    Das Fakes Framework gibt es nur ab VS2012 in der Premium und Ultimate Edition.

    Gruß Maik

    --

    Maik Hanns - http://blog.maikhanns.de

    MCT, MCPD, MCSD

    Schulungen von ppedv - http://ppedv.de

    • Bearbeitet Maik Hanns Montag, 19. August 2013 21:38 Signatur doppelt
    • Als Antwort markiert Christian315 Dienstag, 20. August 2013 07:01
    Montag, 19. August 2013 21:36

Alle Antworten

  • Hi Christian,

    mit dem InternenVisibleToAttribut kannst du deine Private Klassen (Methode) sichtbar machen.

    Schau dir mal den Link an.

    Grundlegen stellt sich an dem Punkt aber immer die Frage ob man private Klassen (Methoden) Testen soll.

    Ich persönlich sehe da zwar kein Problem, aber oftmals deuten solche Probleme auf eine falsche Software Architektur hin. Was manche Leute aber auch schon bei der Verwendung von Mocks und Stubs sagen, wenn man neuen Code schreibt und nicht Abhängigkeiten von 3. Auflösen will. 

    Mit Fakes selber kenne ich mich jetzt nicht so aus.

    Deine 2. und 3. Frage könnten aber auch die automatisch generierten Unit Tests (Komponenten Tests) betreffen.

    Wenn es so ist, beim VS2010 kannst du bei einen der Dialogen zur automatischen Generierung der Test angaben zur Benennung der Tests machen. 

    Und neue Test kannst du mit Rechtsclick z.B. auf die Methode erstellen. So das die alten Tests erhalten bleiben.

    MFG

    Björn

    Montag, 19. August 2013 13:14
  • Hallo Christian,

    die Fakes Assemblies werden bei mir automatisch bei einem Rebuild der Solution oder der Testassembly neu gebaut, ich muss nichts löschen und neu generieren.

    Die Internal Methoden kannst du dank "InternalsVisibleTo" testen. Allerdings benötigst du zwei Einträge. Du musst von deiner zu testenden Assembly die Internals für die Testassembly und die Fakes Assembly frei geben (in der AssemblyInfo.cs)

    [assembly: InternalsVisibleTo("WpfDemo.ViewModel.UnitTests")]
    [assembly: InternalsVisibleTo("WpfDemo.ViewModel.Fakes")]

    Siehe auch MSDN Doku

    http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

    Funktioniert wunderbar. Falls deine Assemblies signiert sind den Key nicht vergessen.

    Ob man auf die Codegenerierung in Sachen Namensgebung Einfluss nehmen kann weiß ich aktuell nicht. Oben im Link findest du auch eine Übersicht über die Namensrichtlinien der generierten Fakes Assmblies.

    Hier noch ein kostenloses eBook was dich in Fakes vielleicht noch etwas weiter bringt:

    http://vsartesttoolingguide.codeplex.com/releases/view/102290

    @Björn: Um VS2010 und die Funktion Unit Test generieren ging es bei den Fragen nicht ;-)

    Das Fakes Framework gibt es nur ab VS2012 in der Premium und Ultimate Edition.

    Gruß Maik

    --

    Maik Hanns - http://blog.maikhanns.de

    MCT, MCPD, MCSD

    Schulungen von ppedv - http://ppedv.de

    • Bearbeitet Maik Hanns Montag, 19. August 2013 21:38 Signatur doppelt
    • Als Antwort markiert Christian315 Dienstag, 20. August 2013 07:01
    Montag, 19. August 2013 21:36
  • Hi Björn,

    vielen Dank für Deine Hilfe!

    Viele Grüße,

    Christian

    Dienstag, 20. August 2013 06:43
  • Hallo Maik,

    vielen Dank auch Dir für die Hilfe und die Infos.

    Viele Grüße,

    Christian.

    Dienstag, 20. August 2013 07:01