next presents moscow, russia mon. 8thdec. 2014 mocks...

14
.NEXT PRESENTS MOSCOW, RUSSIA MON. 8 th DEC. 2014 MOCKS, STUBS and ROCK’N’ROLL maintainable unit tests with AutoFixture Vladimir Almaev

Upload: others

Post on 09-Aug-2020

5 views

Category:

Documents


0 download

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

.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

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

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

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

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

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

[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

} 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

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

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

/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

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

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

Thanks