next presents moscow, russia mon. 8thdec. 2014 mocks...
TRANSCRIPT
![Page 1: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/1.jpg)
.NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014
MOCKS, STUBS and
ROCK’N’ROLL maintainable unit tests
with AutoFixture
Vladimir Almaev
![Page 2: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/2.jpg)
Goals
• Dig into common maintainability problems • Discover solutions
• Minimum amount of code • Keep only essential parts of the tests • Follow DRY
![Page 3: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/3.jpg)
Arrange
![Page 4: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/4.jpg)
Act
![Page 5: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/5.jpg)
Assert
![Page 6: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/6.jpg)
Teardown
![Page 7: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/7.jpg)
[Fact] public void NirvanaGig_Always_ShouldBeAwesome() { }
Pain Points • Constructors
• hard to maintain • Stubs, Mocks, Fakes
• boring code • Hard-coded literals
• are they essentials?
• Unnecessary details • too fat Arrange
phase
var stage = new Stage( new Lights(10), new SoundSystem(), new Guitar("Fender Dzhigurda", 6), new BassGuitar("Gibson Ripper", 4), new Drums("Tama Granstar II")); var performer = new Band( "Nirvana", new Musician("Kurt Cobain"), new Musician("Khrist Novoselic"), new Musician("Dave Grohl")); var crowd = new Crowd(10000); var sut = new Gig(stage, performer, crowd);
// Arrange
sut.Perform(); // Act
Assert.Equal(Mood.Awesome, crowd.Mood); // Assert
performer.Name = "Nirvana";
![Page 8: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/8.jpg)
} AuTO
[ { ]
![Page 9: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/9.jpg)
Show me the code!
![Page 10: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/10.jpg)
Demo recap
• Imperative tests by manual creating Fixture • Declarative tests
• AutoData, InlineAutoData, Custom domain attributes • xUnit.net, NUnit
• Auto-mocking container • Moq, Foq, NSubstitute, FakeItEasy, RhinoMocks
• Repetitive tests using AutoFixture.Idioms • GuardClauseAssertion
![Page 11: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/11.jpg)
/valmaev/mocks-stubs-rocknroll
![Page 12: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/12.jpg)
Further reading
• Mark Seemann’s Pluralsight courses: • Outside-In TDD • Advanced Unit Testing
• Mark Seemann’s blog: http://blog.ploeh.dk • Nikos Baxevanis blog: http://nikosbaxevanis.com
![Page 13: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/13.jpg)
About me
@vladimir_almaev
valmaev http://valmaev.github.io
![Page 14: NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS ...public.jugru.org/dotnext/2014/moscow/almaev.pdf · .NEXT PRESENTS MOSCOW, RUSSIA MON. 8thDEC. 2014 MOCKS, STUBS and ROCK’N’ROLL](https://reader034.vdocuments.us/reader034/viewer/2022050519/5fa317b1d6e41c67313083ec/html5/thumbnails/14.jpg)
Thanks