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

Vortäuschen geht (fast) immer schneller

Vortäuschen geht (fast) immer schneller

Vortäuschen geht (fast) immer schneller. Endlich ist es soweit: Softwareentwickler sind dort angekommen, wo die Tester schon seit Jahren auf sie warten. Unit Testing als kleinstes gemeinsames Verständnis für die Entwicklung qualitativ hochwertigen Code gehört nicht mehr nur in die Schublade, auf der steht: "Elite", sondern findet als allgemein guter Stil Einzug in den Werkzeugkästen von immer mehr Programmierern. Neben vielen Verbesserungen, die das Visual Studio 2012 mit sich bringt, hat Microsoft nun auch ein eigenes Mocking Framework in ihr ALM Flaggschiff gezogen. Das Microsoft Fakes Isolation Framework ist die konsequente Weiterentwicklung von Microsoft Moles, das bis dato nur wenigen Entwicklern ein Begriff gewesen sein dürfte. 'Attrapenbau leicht gemacht mit Stubs und Shims' wird daher das Thema dieser Session. Dass das Testen mit Mocks nicht nur Arbeit erleichtert, sondern auch die Performance steigert wird nachweislich zeigen: Vortäuschen geht (fast) immer schneller!

Avatar for Christian Jacob

Christian Jacob

June 26, 2013
Tweet

More Decks by Christian Jacob

Other Decks in Programming

Transcript

  1. AGENDA • Microsoft Research • Pex & Moles • Microsoft

    Fakes • Stubs • Shims • Code Digger
  2. 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.
  3. STUBS VS SHIMS Unit Test Abhängigkeit Stub Zu testender Code

    Unit Zu testender Code Unit Test Unit Abhängigkeit Shim
  4. STUBS VS SHIMS KRITERIUM STUB SHIM Maximale Performance  ()

    Abstrakte und virtuelle Methoden  Schnittstellen  Interne Typen   Statische Methoden  Sealed Typen  Private Methoden 
  5. Komposition fördert die lose Kopplung und die Testbarkeit eines Systems

    und ist oft flexibler. Clean Code Developer Roter Grad cleancodedeveloper.de
  6. BEISPIEL [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); }
  7. BEISPIEL [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); } }
  8. Wo Licht ist… • Der Umgang mit Unit-Testing ist in

    allen Editionen identisch. • Aber: Fakes gibt es nur mit Visual Studio 2012 Premium* und Ultimate * Ab Visual Studio 2012 Update 2
  9. Wo Licht ist… • Kein Fakes in Visual Studio Express

    • Auf Shims besser verzichten • Code Refactoring und Schnittstellen sind der bessere Weg • Wo ist Pex?
  10. FAKES IM TEAM • 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
  11. Wo Schatten ist… • Auch in Team Build und in

    der Cloud Fakes 3rd Party Test Impact Code Coverage
  12. PEX INSIDE Wer sich hier aus Versehen verklickt… … kriegt

    direkt eine zweite Chance! Vote for it  DEMO Wer sich hier aus Versehen verklickt… … kriegt direkt eine zweite Chance! Vote for it 
  13. 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
  14. Be happy if it works, but don't expect it to

    work. We shall make that more clear. Nikolai Tillmann Microsoft Principle RSDE Microsoft Corporation