21
Generation_P Consulting Ltd Generation_P Consulting Ltd Software Solutions for the Travel Industry Software Solutions for the Travel Industry TDD TDD Make your life better Make your life better Antanina Shafranskaya Antanina Shafranskaya Antanina.Shafranskaya@generation_p.com

Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

  • Upload
    solit

  • View
    658

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

Generation_P Consulting LtdGeneration_P Consulting LtdSoftware Solutions for the Travel IndustrySoftware Solutions for the Travel Industry

TDDTDDMake your life betterMake your life better

Antanina ShafranskayaAntanina ShafranskayaAntanina.Shafranskaya@generation_p.com

Page 2: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: way to better life

Test before code!

TDD principals: think first

trivial first

test <=> what ; implementation <=> how

different levels of tests

red – green – refactor

red: behavior (responsibility oriented design)

green: coding

refactor: design, refactor

Page 3: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

ping – pong

who has keyboard is a King!

through-test driving

TDD: Pair programming

Page 4: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Testing best practices

Page 5: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Test naming

Page 6: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Test naming

Page 7: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Exception processing

Page 8: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: given-when-then

Page 9: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: multiple asserts

Page 10: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Whole test system

unit testsintegration

acceptanceauto gui

manual

Page 11: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Unit tests

One test – one behavior

Independent: isolated class

Reliable

Fast

Page 12: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Integration and Acceptance Tests

integration: component communication with some isolation

acceptance: full system test, no isolation or mocks

client requirements

Page 13: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Mocks

fake – some little implementation

stub – return some predefined result

mock – object with programmed expectation

spy – stub with flow verification

Page 14: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Mockito

Easy to:

stub methods verify behavior

verify sequence of calls

Cannot:

mock final classes, methods

mock static

Page 15: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Mockito

@RunWith(MockitoJUnitRunner.class) annotation at the class-level of the test case

@Mock annotation at mocking objects init tested class in method annotated with @Before

when(mock.methodCall()).thenReturn(someResult); doThrow(exception).when(object).voidMethodCall();

verify(mock, times).methodCall() verifyZeroInteractions(mocks) inOrder(mock)

Page 16: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: Mockito

Page 17: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: PowerMock

Easy way to mock: static methods

final methods or classes

private methods

construction of new objects

partial mocking

Page 18: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

TDD: PowerMock

@RunWith(PowerMockRunner.class) annotation at the class-level of the test case.

@PrepareForTest(ClassThatContainsStaticMethod.class) annotation at the class-level of the test case.

PowerMock.mockStatic(ClassThatContainsStaticMethod.class) to mock all methods of this class.

PowerMock.mockStaticPartial(ClassThatContainsStaticMethod.class, "methodName", ArgumentClass.class);

PowerMock.replay(ClassThatContainsStaticMethod.class) to change the class to replay mode.

PowerMock.verify(ClassThatContainsStaticMethod.class) to change the class to verify mode.

example: http://code.google.com/p/powermock/source/browse/trunk/modules/module-test/easymock/junit4-test/src/test/java/samples/junit4/singleton/MockStaticTest.java

Page 19: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

What to read?

Robert C. Martin “Clean Code: A Handbook of Agile Software Craftsmanship”

Joshua Kerievsky “Refactoring to Patterns” Steve Freeman, Nat Pryce “Growing Object-

Oriented Software, Guided by Tests”

Page 20: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

Questions?

Thank you and good luck!Thank you and good luck!

Page 21: Solit 2012, TDD и отдельные аспекты тестирования в Java, Антонина Шафранская

References

http://www.slideshare.net/agileee/clean-tests

http://www.slideshare.net/wakaleo/junit-kung-fu-getting-more-out-of-your-unit-tests

http://mockito.googlecode.com/svn/tags/latest/javadoc/org/mockito/Mockito.html

http://code.google.com/p/powermock/