Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Shims mit Microsoft Fakes sinnvoll genutzt

Shims mit Microsoft Fakes sinnvoll genutzt

Auf die Erkenntnis hin, dass sich mit dem Microsoft Fakes Isolation Framework sogar Umleitungen für Methoden implementieren lassen, in deren Quellcodebesitz man nicht ist, haben findige Entwickler bereits probiert, es zum Cheaten in Egoshootern einzusetzen. Das wäre natürlich auch einfacher, als Code disassemblieren zu müssen, Hooks zu implementieren und dergleichen mehr an Aufwand zu betreiben, statt zu lernen, wie man besser darin wird das Spiel zu spielen. Aber Spaß beiseite. Microsoft Fakes kann natürlich nur im Kontext von Unit Tests eingesetzt werden. Wir werden in der Session selbst einen kleinen Blick unter die Haube riskieren, um zu schauen warum das so ist, wie Fakes arbeitet, uns die Frage stellen wie Detouring funktioniert und uns vor allem Szenarien überlegen, in denen Shims Sinn ergeben. Auch auf die Stubs werden wir natürlich einen Blick werfen. Der Vollständigkeit halber. Denn wie man mittels Interfaces Abhängigkeiten isoliert weiß ja mittlerweile jeder,... oder?

Avatar for Christian Jacob

Christian Jacob

June 15, 2015
Tweet

More Decks by Christian Jacob

Other Decks in Programming

Transcript

  1. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 3 Ariane 5 Entwicklungskosten:

    ca. 7 Mrd. Dollar Ca. 500 Mio. Dollar Verlust für Rakete und vier Satelliten
  2. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 4 Im Golfkrieg versagte

    eine Patriot Rakete beim Abfangen einer Scud In Folge dessen starben 28 Soldaten
  3. © TOP TECHNOLOGIES CONSULTING GmbH Bugs allgemein 15.06.2015 6 95

    2000 XP Vista 7 8 60 50 40 30 20 10 500 400 300 200 100 … Debian 7 … Normal 25 Fehler pro 1.000 LOC Gut 2 Fehler pro 1.000 LOC Space Shuttle Software < 1 Fehler pro 10.000 LOC
  4. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 10 Fakes makes it

    easier and faster to create well-isolated unit tests when you do have systems that Peter Provost Sr. Program Manager Lead Microsoft Corporation are not necessarily testable. Microsoft Fakes Isolation Framework Mantra
  5. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 11 Zu testende Solution

    Stub Shim Unvollständige Solution Externe Solution IFoo IFoo Microsoft Fakes Isolation Framework Stubs vs. Shims
  6. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 12 Unit Test Abhängigkeit

    Stub Zu testender Code Unit Zu testender Code Unit Test Unit Abhängigkeit Shim Microsoft Fakes Isolation Framework Stubs vs. Shims
  7. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 13 KRITERIUM STUB SHIM

    Maximale Performance  () Abstrakte und virtuelle Methoden  Schnittstellen  Interne Typen   Statische Methoden  Sealed Typen  Private Methoden  Microsoft Fakes Isolation Framework Stubs vs. Shims
  8. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 14 Komposition fördert die

    lose Kopplung und die Testbarkeit eines Systems und ist oft flexibler. Clean Code Developer Roter Grad cleancodedeveloper.de Microsoft Fakes Isolation Framework Mocking via Schnittstellen
  9. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 15 [TestMethod] public void

    GameListNotEmptyTestStubs() { var testfilePath = "GameList.txt"; var content = "Tic Tac Toe"; // Notice, that there is no real file access happening here var fileSystem = new StubIFileSystem() { ReadAllTextString = filename => { return content; } }; bool actual = FileHelper.IsEmpty(fileSystem, testfilePath); Assert.IsFalse(actual); } Microsoft Fakes Isolation Framework Mocking via Schnittstellen: Stubs
  10. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 16 [TestMethod] public void

    GetAgeTestShim() { using (ShimsContext.Create()) { ShimDateTime.NowGet = () => new DateTime(2011, 1, 1); // Arrange var birthdate = new DateTime(1993, 1, 1); var expected = 18; // Act var actual = DateTimeHelper.GetAge(birthdate); // Assert Assert.AreEqual(expected, actual); } } Microsoft Fakes Isolation Framework Mocking via Detours: Shims
  11. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 17 Der Umgang mit

    Unit-Testing ist in allen Editionen identisch. Aber: Fakes gibt es nur mit Visual Studio 2013 Premium* und Visual Studio 2013 Ultimate * Seit Visual Studio 2012 Update 2 Microsoft Fakes Isolation Framework Verfügbarkeit
  12. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 18 Ab Visual Studio

    2015 sind die bisherige Premium und Ultimate SKU in einer Visual Studio Enterprise vereint Darin findet sich nun auch Fakes wieder Microsoft Fakes Isolation Framework Verfügbarkeit
  13. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 21 Microsoft Fakes Isolation

    Framework Verfügbarkeit http://j.mp/dwx15fakes
  14. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 23 A: Microsoft solved

    this issue using the darkest eldritch magic. Q: How do Microsoft Fakes' shims actually work internally? (Read http://research.microsoft.com/pubs/131693/moles.pdf) Visual Studio 11 Fakes Part 1 - Stubs http://www.peterprovost.org/blog/2012/04/15/visual-studio-11-fakes-part-1/ Visual Studio Fakes Part 2 - Shims http://www.peterprovost.org/blog/2012/04/25/visual-studio-11-fakes-part-2/ Visual Studio 2012 Fakes - Part 3 - Observing Stub Behavior http://www.peterprovost.org/blog/2012/11/29/visual-studio-2012-fakes-part-3/
  15. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 24 A: This is

    a Fakes limitation in Visual Studio 2012. In Visual Studio 2013, we generate a custom delegate type directly in the fakes assembly instead of relying on just the pre-defined types. Q: Shimming methods with more than 2 out arguments won't work. Is this a known limitation with Fakes?
  16. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 25 Auch in Team

    Build und in der Cloud Microsoft Fakes Isolation Framework Verfügbarkeit
  17. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 26 Kein Fakes in

    Visual Studio Express Auf Shims besser verzichten Code Refactoring und Schnittstellen sind der bessere Weg Wenn Fakes Moles ersetzt, wo ist dann eigentlich Pex? Microsoft Fakes Isolation Framework A & Q
  18. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 29 If you disable

    the Portable Class Library restriction in Code Digger, then you are leaving the area where the Code Digger has been designed for to work. Nikolai Tillmann Microsoft Principle RSDE Microsoft Corporation Microsoft Fakes Isolation Framework Pex Inside
  19. © TOP TECHNOLOGIES CONSULTING GmbH TUTHCFKAPNWCDOSUT? 15.06.2015 30 The Unit

    Test Helper Companion Formerly Known As Pex, No Wait... Code Digger,... Or Smart Unit Test? http://blogs.msdn.com/b/visualstudioalm/archive/2014/12/11/smart-unit-tests-a-mental-model.aspx Smart Unit Tests - a mental model
  20. © TOP TECHNOLOGIES CONSULTING GmbH 15.06.2015 31 Fakes referenziert Microsoft.QualityTools.Testing.Fakes.dll

    Einchecken hilft nicht und resultiert lediglich in einer NotSupportedException bei nicht unterstützten Editionen Kategorien helfen, um Fakes-Tests auf nicht unterstützen Systemen herauszufiltern Alternativ: Fakes Tests in eigene Projekte auslagern Microsoft Fakes Isolation Framework Fakes intim im Team