mocks, stubs and rock'n'roll: maintainable unit tests with autofixture

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

Upload: vladimir-almaev

Post on 17-Jul-2015

190 views

Category:

Software


3 download

TRANSCRIPT

.NEXT PRESENTSMOSCOW, RUSSIA MON. 8thDEC. 2014

MOCKS, STUBSand

ROCK’N’ROLLmaintainable unit tests

with AutoFixture

Vladimir Almaev

Goals

•Dig into common maintainability problems

•Discover solutions• Minimum amount of code

• Keep only essential parts of the tests

• Follow DRY

Arrange

Act

Assert

Teardown

[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

[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

sut.Perform();

Assert.Equal(Mood.Awesome, crowd.Mood);

performer.Name = "Nirvana";

[

{]

[

{]

Show me the code!

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

/valmaev/mocks-stubs-rocknroll

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

About me

@vladimir_almaev

valmaev

http://valmaev.github.io

Thanks