Sie sind hier:
Lexikon/Glossar
Telefon (Mo-Fr 9 bis 16 Uhr):
0201/649590-0
|
Kontaktformular
Buy me a coffee
MENU
Start
Hauptseite
Angebote im Überblick
Kernkompetenzen
Softwareentwicklung
Beratung
Firmen-Schulungen
Offene Seminare
Online-Maßnahmen
Vorträge
Coaching
Support
Fachbücher
Fachartikel
Konditionen
Themen
Themenüberblick
Aktuelle Themen
Web & Cloud
Apps / Mobilplattformen
Benutzeroberflächen / User Experience
.NET
JavaScript/TypeScript
Java
Programmiersprachen/Sprachsyntax
Entwicklungswerkzeuge
Scripting
Softwareentwicklung allgemein
Datenbanken
Betriebssysteme und Virtualisierung
Microsoft Server-Produkte
Windows und Microsoft Office für Anwender
Allgemeine IT-Themen
Beratung
Beratungsthemen
Coaching
Softwareentwicklung
Technischer Support
Unsere Top-Berater
Referenzkunden
Angebotsanfrage
Individuelle Schulungen
1020 Schulungsthemen
Agendakonfigurator
Weiterbildungsphilosophie
Didaktische Konzepte
Vor-Ort oder Online
Unsere Top-Trainer
Referenzkunden
Teilnehmerfeedback
Angebotsanfrage
Offene Seminare
.NET-Akademie
.NET/C#-Basisseminar
WPF
WinUI
.NET MAUI
Blazor
ASP.NET WebAPI & gRPC
Entity Framework Core
Unit Testing / TDD
PowerShell
Infotage
Wissen
Übersicht
Fachbücher
Fachartikel
Konferenzvorträge
Konferenzen/Events
Spickzettel
Lexikon/Glossar
Programmcodebibliothek
Versionshistorie
Weblog
Downloads
Newsletter
Community-/Leserportal
Registrierung
.NET/C#/Visual Studio
.NET 8.0
.NET 7.0
.NET 6.0
ASP.NET (Core)/Blazor
PowerShell
Über uns
Kontakt
Selbstdarstellung
Kernkompetenzen
Dr. Holger Schwichtenberg
Top-Experten
Leitung & Kundenteam
Referenzkunden
Kundenaussagen
Referenzprojekte
Partner
Konditionen
Stellenangebote
Weitere Websites
Impressum
Datenschutzerklärung, Haftung, Urheberrecht
Suche
Themenkatalog
Tag Cloud
Volltextsuche
Site Map
FAQs
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