Sie sind hier:
Wissen
Telefon (Mo-Fr 9 bis 16 Uhr):
0201/649590-0
|
Kontaktformular
MENU
Medien
Übersicht
Lexikon/Glossar
Spickzettel
Weblog
Konferenzvorträge
Fachbücher
Fachartikel
Leserportal
Autoren gesucht!
Literaturtipps
Praxisnahe Fallbeispiele
Downloads
Newsletter
.NET
Startseite
.NET 8.0
.NET 7.0
.NET 6.0
.NET 5.0
.NET Core
.NET 4.0/4.5.x/4.6.x
.NET 3.0/3.5
.NET 2.0
.NET-Lexikon
Programmiersprachen
Entwicklerwerkzeuge
Klassenreferenz
Softwarekomponenten
Windows Runtime
World Wide Wings-Demo
Versionsgeschichte
Codebeispiele
ASP.NET
Artikel
Bücher
Schulung & Beratung
Konferenzen/Events
ASP.NET
Startseite
Lexikon
Sicherheit
Konfiguration
Global.asax
Tracing
Technische Beiträge
Klassenreferenz
Programmiersprachen
Entwicklerwerkzeuge
Softwarekomponenten
Forum
Schulung & Beratung
PowerShell
Startseite
Commandlet-Referenz
Codebeispiele
Commandlet Extensions
Versionsgeschichte
Schulungen+Beratung
Windows
Startseite
Windows Runtime (WinRT)
Windows PowerShell
Windows Scripting
Windows-Schulungen
Windows-Lexikon
Windows-Forum
Scripting
Startseite
Lexikon
FAQ
Bücher
Architektur
Skriptsprachen
Scripting-Hosts
Scripting-Komponenten
COM/DCOM/COM+
ADSI
WMI
WMI-Klassenreferenz
Scripting-Tools
WSH-Editoren
Codebeispiele
.NET-Scripting
Forum
Schulung & Beratung
Nutzer
Anmeldung/Login
Buchleser-Registrierung
Gast-Registrierung
Hilfe
Website-FAQ
Technischer Support
Site Map
Tag Cloud
Suche
Kontakt
Erklärung des Begriffs: Microsoft Fakes Isolation Framework (Fakes)
Begriff
Microsoft Fakes Isolation Framework
Abkürzung
Fakes
Eintrag zuletzt aktualisiert am
20.05.2019
Zur Stichwortliste unseres Lexikons
Was ist
Microsoft Fakes Isolation Framework
?
Framework für Mocking (Attrappen) für Unit Tests in
Visual Studio 2012
Ein
Mock-Objekt
-Framework dient dazu, Attrappen anstelle realer Objekte in Unit Tests einzusetzen, um Programmteile/
Komponente
n in Isolation zu testen. Microsoft liefert mit Microsoft Fakes Isolation Fra-mework erstmal ein
Mock-Objekt
-Framework mit. Zuvor gab es schon kommerziellen und nicht-kommerzielle Drittanbieter (z.B. nMock. EasyMock.NET, TypeMock Isolator, Rhino Mocks, JustMock). Microsoft selbst hatte einen Vorläufer namens „Moles“ [
http://research.microsoft.com/en-us/projects/moles/
].
Visual Studio bietet im Ast „References“ für jede eingebundene
Assembly
den Eintrag „Add Fakes
Assembly
“ an. Dieser erzeugt eine neue
Assembly
mit dem Zusatzes „.Fakes“, z.B. aus „
System.Data
.Entity“ entsteht „
System.Data
.Entity.Fakes“. In diesem
Assembly
gibt es für jede Klasse eine Attrappen-Klasse, z.B.
System.Data
.Objects.Fakes.ShimObjectContext für
System.Data
.Objects.ObjectContext.
Stub
: Austausch einer Klasse durch eine Attrappe auf Basis einer Schnittstelle
Shim: Umleiten von Code ohne Schnittstelle (Umbiegen per
Interception
mit IL-Code-Generierung zur Laufzeit). Nur in Unit Test-Projekten verfügbar.
Stub
-Attrappen
Die Erstellung von
Stub
-Attrappen setzt voraus, dass die Objekte eine explizite .NET-Schnittstelle besit-zen.
Gegeben sei folgender Unit Test:
[TestMethod]
[TestMethod]
public void Test
Buchung
RealesManagerObjekt()
{
int FlugNr = 100;
int PassagierNr = 1;
var fbl = new FlugBLManager();
var bm = new BuchungsManager(fbl);
var buchung = bm.BuchungenErstellen(FlugNr, PassagierNr);
Assert.IsTrue(buchung);
}
Listing: Testcode ohne Attrappe
Die Klasse BuchungsManager verwendet damit intern eine Instanz der Klasse FlugBLManager, um einen Flug zu laden. FlugBLManager implementiert die Schnittstelle IFlugBLManager. BuchungsManager deklariert als Typ nicht die konkrete Klasse FlugBLManager, sondern die Schnittstelle IFlugBLManager.
Public partial class BuchungsManager
{
public IFlugBLManager flugBLManager = new FlugBLManager();
public BuchungsManager(IFlugBLManager flugBLManager)
{
this.flugBLManager = flugBLManager;
}
…
}
Listing: Ausschnitt aus der Implementierung der zu testenden Klasse BuchungsManager
Dadurch kann man anstelle der realen Klasse FlugBLManager nun die von Microsoft Fakes erzeugte Attrappe übergeben. Dieser Attrappe kann der Entwickler per Programmcode mitteilen, wie sie auf Aufrufe reagieren soll. Microsoft Fakes generiert für jedes
Field
,
Property
und
Methode
sowie jeden Konstruktor eine Attrappen-
Methode
. Die Attrappen-
Methode
hat nicht ganz den gleichen Namen. Es wird der Typna-me der Parameter angehängt. Aus GetRoute(string, string) wird so also GetFluegeRouteStringString(string, string). Im folgenden Code wird verhindert, dass der FlugBLManager tatsächlich einen Flug aus der
Datenbank
lädt.
[TestMethod]
public void Test
Buchung
Stub
Objekt()
{
int FlugNr = 100;
int PassagierNr = 1;
//
Stub
erzeugen
var stub = new de.
WWW
ings.GL.Fakes.
Stub
IFlugBLManager();
// Reaktion auf Aufruf von GetFlug() definieren
stub.GetFlug
Int64
= (flugnr) => new Flug() { FlugNr = (int)flugnr };
// Buchungsmanager mit dem
Stub
verbinden
var bm = new BuchungsManager(stub);
var buchung = bm.BuchungenErstellen(FlugNr, PassagierNr);
Assert.IsTrue(buchung);
}
Listing: Testcode unter Verwendung einer
Stub
-Attrappe von Microsoft Fakes
Shim-Attrappen
Shim setzt man immer dann ein, wenn es keine explizite .NET-Schnittstelle gibt. Im folgenden Beispiel wird eine Attrappe für die
Methode
SaveChanges() in der vom
ADO.NET Entity Framework
bereitgestell-ten Klasse
System.Data
.ObjectContext verwendet. Die Attrappe antwortet immer mit dem Wert „1“ (An-zahl der Änderungen), obwohl niemals wirklich etwas gespeichert wurde. Die Instanziierung eines ShimContext ist notwendig, um das den Aufruf zur Laufzeit abzufangen und an die Attrape zu leiten. Andere
Methode
, die nicht explizit belegt wurde mit einer Attrappenimplementierung, gehen zum realen Objekt.
[TestMethod]
public void Test
Buchung
Stub
Objekt()
{
int FlugNr = 100;
int PassagierNr = 1;
//
Stub
erzeugen
var stub = new de.
WWW
ings.GL.Fakes.
Stub
IFlugBLManager();
// Reaktion auf Aufruf von GetFlug() definieren
stub.GetFlug
Int64
= (flugnr) => new Flug() { FlugNr = (int)flugnr };
// Buchungsmanager mit dem
Stub
verbinden
var bm = new BuchungsManager(stub);
var buchung = bm.BuchungenErstellen(FlugNr, PassagierNr);
Assert.IsTrue(buchung);
}
Listing: Testcode unter Verwendung einer Shim-Attrappe von Microsoft Fakes
Hinweis: Shims haben einige Vorteile:
Man kann sie auch einsetzen, wenn es keine explizite Schnittstelle gibt.
Man kann auch private Mitglieder aufrufen.
Man kann auch statische Mitglieder aufrufen.
Aber Shims sind aber langsamer als
Stub
s, weil hier zur Laufzeit der
MSIL
-Code umgeschrieben werden muss.
Querverweise zu anderen Begriffen im Lexikon
ADO.NET Entity Framework (EF)
Visual Studio 2012 (VS2012)
Interception
Mock-Objekt
System.Data
Komponente
Datenbank (DB)
Property
Assembly
Methode
Field
Int64
Stub
Microsoft Intermediate Language (MSIL)
World Wide Web (WWW)
Beratung & Support
Anfrage für Beratung/Consulting zu Microsoft Fakes Isolation Framework Fakes
Gesamter Beratungsthemenkatalog
Technischer Support zum Microsoft Fakes Isolation Framework Fakes
Schulungen zu diesem Thema
.NET 4.5-Update - Die Neuerungen in .NET Framework 4.5/4.5.1/4.5.2 und Visual Studio 2012/2013 im Überblick
Unit Testing / Testgetriebene Entwicklung / Test Driven Development (TDD) von .NET-Anwendungen (C# oder Visual Basic .NET)
Visual Studio 2012 (Visual Studio 11.0) Update - Die Neuerungen gegenüber Visual Studio 2010
Anfrage für eine individuelle Schulung zum Thema Microsoft Fakes Isolation Framework Fakes
Gesamter Schulungsthemenkatalog
Bücher zu diesem Thema
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr