Automated Testing In Java

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Automated Testing In Java - Presentation Transcript

    1. Automated Testing in Java By Franz See [email_address] http://twitter.com/franz_see
    2. Problems? Regression Too much time Debugging Waiting for your build to finish Documentation that lies!
    3. What is it? public class Image { public Image(String path) {...}; public MimeType getMimeType() {...}; public Dimension getDimension() {...}; } public class ImageTest extends TestCase { public void testGetMimeType() { Image jpegImage = new Image(“dummy.jpeg”); MimeType mimeType = jpegImage.getMimeType(); assertEquals(MimeType.JPEG, mimeType); } public void testGetDimension() { Image jpegImage = new Image(“dummy.jpeg”); Dimension dimension = jpegImage.getDimension(); assertEquals(new Dimension(400,600), dimension); } }
    4. The Parts (part1) public class ImageTest extends TestCase { public void testGetMimeType() { // setup Image jpegImage = new Image(“dummy.jpeg”); // exercise MimeType mimeType = jpegImage.getMimeType(); // verify assertEquals(MimeType.JPEG, mimeType); } // implict teardown public void testGetDimension() { Image jpegImage = new Image(“dummy.jpeg”); Dimension dimension = jpegImage.getDimension(); assertEquals(new Dimension(400,600), dimension); } }
    5. The Parts (part2) public class ImageTest extends TestCase { private Image jpegImage; protected void setUp() { super.setUp(); jpegImage = new Image(”dummy.jpeg”); } protected void tearDown() { jpegImage = null; super.tearDown(); } public void testGetMimeType() { MimeType mimeType = jpegImage.getMimeType(); assertEquals(MimeType.JPEG, mimeType); } public void testGetDimension() { Dimension dimension = jpegImage.getDimension(); assertEquals(new Dimension(400,600), dimension); } }
    6. The Parts (part3) // name should be descriptive // i.e. test<MethodName>[Should] // i.e. test[Given][When][Then] public void testGetMimeType() { MimeType mimeType = jpegImage.getMimeType(); // [descriptive message,] <expected>, <actual> assertEquals(MimeType.JPEG, mimeType); }
    7. Tips :: Creating Tests
      • Should contain NO logic
      • One assert per test
      • One test logic per test body
      • Do not catch exceptions unless that's what you're testing
    8. The Goal Name File functional unit unit integration Controller Service Repository DB My Vaction Pic C:Pics01.jpeg Upload should store in repo should persist in db should persist inputs should serve requests
    9. Functional Testing
      • Tests the application as a whole
      • Regression for your application's features/ capability
      • Usually done by
        • Driving the UI
        • Driving the layer just below the UI
      • Goal
        • To cover as much functionality
        • To be easy to read / write
    10. Unit Testing
      • Testing the atomic parts of your code
    11. Atomic Examples public Set select(Matcher matcher) { Set matchingObjects = new HashSet(); for(Object candidate : this.source) { if(matcher.matches(candidate)) { matchingObjects.add(candidate); } } return matchingObjects; } public Person get(Long id) { Assert.notNull(id, “Should have id to retrieve a Person.”); return repo.get(id); }
    12. Test Organization public class PersonManager { public void create(Person person) {…} public Person retrieve(Long id) {…} public void update(Person person) {…} public void delete(Long id) {...} }
    13. Test Organization :: SUT public class Container { public Long add(Object newObject) {…} public Object get(Long id) {…} public void replace(Long id, Object replacement) {…} public void delete(Long id) {...} }
    14. Test Organization :: Simple Test Per Class public class ContainerTest extends TestCase { public void testAdd() {...} public void testGet() {...} public void testReplace() {...} public void testDelete() {...} }
    15. Test Organization :: Non-Simple Test Per Class public class ContainerTest extends TestCase { public void testGivenNonFull_WhenAdd_ThenPutInContainer() {…} public void testGivenFull_WhenAdd_ThenThrowException() {...} public void testGivenKnownId_WhenGet_ThenReturnObject() {…} public void testGivenUnknownId_WhenGet_ThenNull() {...} public void testGivenKnownId_WhenReplace_ThenRemoveAndAdd() {…} public void testGivenUnknownId_WhenReplace_ThenAdd() {...} public void testGivenKnownId_WhenDelete_ThenRemove() {…} public void testGivenUnknownId_WhenDelete_ThenThrowException() {...} }
    16. Test Organization :: Test Per Fixture public class ContainerTest extends TestSuite { public static class GivenNonFull extends TestCase { public void testWhenAdd_ThenPutInContainer() {...} } public static class GivenFull extends TestCase { public void testWhenAdd_ThenThrowException() {...} } public static class GivenKnownId extends TestCase { public void testWhenGet_ThenReturnObject() {…} public void testWhenReplace_ThenRemoveAndAdd() {…} public void testWhenDelete_ThenRemove() {…} } public static class GivenUnknownId extends TestCase { public void testWhenGet_ThenNull() {...} public void testWhenReplace_ThenAdd() {...} public void testWhenDelete_ThenThrowException() {...} } }
    17. Test Organization :: Test Per Feature public class ContainerTest extends TestCase { public static class WhenAdd extends TestCase { public void testGivenNonFull_ThenPutInContainer() {…} public void testGivenFull_ThenThrowException() {...} } public static class WhenGet extends TestCase { public void testGivenKnownId_ThenReturnObject() {…} public void testGivenUnknownId_ThenNull() {...} } public static class WhenReplace extends TestCase { public void testGivenKnownId_ThenRemoveAndAdd() {…} public void testGivenUnknownId_ThenAdd() {...} } public static class WhenDelete extends TestCase { public void testGivenKnownId_ThenRemove() {…} public void testGivenUnknownId_ThenThrowException() {...} } }
    18. Tip :: Fixtures
      • What if there are two types of fixtures, and each fixture has several states?
      • What about reusing fixtures in Non-Test Per Fixture?
      • Use creational patterns
    19. Tip :: Fixtures (part2) public static class WhenTake extends TestCase { public void testGivenFoodCouponWithinPromoDates_ThenRetrieveFoodGift() { Coupon givenCoupon = new CouponBuilder() .for(CouponType.Food) .within(promoDate.start,promoDate.end) .build(); Gift gift = storeOutlet.take(givenCoupon); assertEquals(Gift.Food, gift); } public void testGivenFoodCouponOutsidePromoDates_ThenRetrieveNull() { Coupon givenCoupon = new CouponBuilder() .for(CouponType.Food) .outside(promoDate.start,promoDate.end) .build(); Gift gift = storeOutlet.take(givenCoupon); assertNull(gift); } }
    20. Isolating your unit
      • Test Doubles
        • Dummies
        • Mocks
        • Stubs
        • Spies
        • Fakes
    21. Data Flow :: Code public Entity createEntity(Long id, String name) { return new Entity(id, name); }
    22. Data Flow :: Diagram createEntity id name Entity processing
    23. Data Flow :: Code public Entity createEntity(Long id, String name) { Entity entity = registry.contains(id) ? registry.get(id) : new Entity(id); entity.setName(name); registry.store(entity); return entity; }
    24. Data Flow createEntity id name Entity processing contains(..) get(..) store(..) registry
    25. Data Flow createEntity id name Entity processing contains(..) get(..) store(..) Direct Input Indirect Input Direct Output Indirect Output Collaborator registry
    26. Test Doubles :: Dummies (part1) createEntity id name Entity processing contains(..) get(..) store(..) registry
    27. Test Doubles :: Dummies (part2) private SystemUnderTest sut; private Registry registry; protected void setUp() { super.setUp(); registry = new RegistryImpl(); sut.setRegistry(registry); } … public void testCreateEntity() { Long givenDummyId = -1L; String givenDummyName = “dummy name”; Entity entity = createEntity(givenDummyId, givenDummyName); assertEquals(“Should have set name of entity.”, givenDummyName, entity.getName()); }
    28. Test Doubles :: Mocks (part1) createEntity id name Entity processing contains(..) get(..) store(..) registry
    29. Test Doubles :: Mocks (part2) ... protected void setUp() { super.setUp(); registry = Mockito.mock(Registry.class); sut.setRegistry(registry); } … public void testCreateEntity() { Long givenContainedId = 10L; String givenDummyName = “dummy name”; Entity containedEntity = new Entity(givenContainedId, givenDummyName); doReturn(containedEntity).when(registry).get(givenContainedId). Entity entity = createEntity(givenContainedId, givenDummyName); assertEquals(“Should retrieved contained entity.”, containedEntity, entity); verify(registry).store( containedEntity ); }
    30. Test Doubles :: Stubs (part1) createEntity id name Entity processing contains(..) get(..) store(..) registry
    31. Test Doubles :: Stubs (part2) public class RegistryStub implements Registry { private final boolean contains; private final Entity containedEntity; public Registry(boolean contains, Entity containedEntity) { this.contains = contains; this.cachedEntity = containedEntity; } public boolean contains(Long id) { return contains; } public Entity get(Long id) { return containedEntity; } public void store(Entity enitty) {} }
    32. Test Doubles :: Stubs (part3) ... private Entity containedEntity; ... protected void setUp() { super.setUp(); containedEntity = new Entity(); registry = new RegistryStub(true, containedEntity); sut.setRegistry(registry); } … public void testCreateEntity() { Long givenContainedId = 10L; String givenDummyName = “dummy name”; Entity entity = createEntity(givenContainedId, givenDummyName); assertSame(“Should retrieved contained entity.”, containedEntity, entity); }
    33. Test Doubles :: Spies (part1) createEntity id name Entity processing contains(..) get(..) store(..) registry
    34. Test Doubles :: Spies (part2) public class RegistrySpy implements Registry { private Entity storedEntity; public boolean contains(Long id) { return false; } public Entity get(Long id) { return null; } public void store(Entity entity) { storedEntity = entity; } public Entity getStoredEntity() { return storedEntity; } }
    35. Test Doubles :: Spies (part3) ... protected void setUp() { super.setUp(); registry = new RegistrySpy(); sut.setRegistry(registry); } … public void testCreateEntity() { Long givenContainedId = 10L; String givenDummyName = “dummy name”; Entity entity = createEntity(givenContainedId, givenDummyName); assertNotNull(“Should have stored entity.”, registry.getStoredEntity()); }
    36. Test Doubles :: Fakes (part1) createEntity id name Entity processing contains(..) get(..) store(..) registry
    37. Test Doubles :: Fakes (part2) public class FakeRegistry implements Registry { private final Map<Long,Entity> container; public FakeRegistry(Entity containedEntity) { store(containedEntity); } public boolean contains(Long id) { return container.containsKey(id); } public Entity get(Long id) { return container.get(id); } public void store(Entity entity) { container.put(entity.getId(), entity); } }
    38. Test Doubles :: Fakes (part3) ... private Entity storedEntity; ... protected void setUp() { super.setUp(); storedEntity = new Entity(10L); registry = new FakeRegistry(storedEntity); sut.setRegistry(registry); } … public void testCreateEntity() { Long givenContainedId = storedEntity.getId(); String givenDummyName = “dummy name”; Entity entity = createEntity(givenContainedId, givenDummyName); assertSame(“Should have retrieved contained entity.”, storedEntity, entity); }
    39. Integration Testing
      • When units interact with external dependencies
        • Database
        • Filesystem
        • Other applications/services
        • Time
        • Etc
      • Although external dependencies can be replaced by Test Doubles, tests might mean nothing if you do so.
    40. Tip :: which test to start from
      • Go for top-down approach
    41. When should you write tests
      • Test Last Development
        • When you just want to bolt down whatever you've just finished
      • Test First Development
        • YAGNI
        • KISS
    42. When should you write tests
      • Test Driven Design
        • TFD + Refactor
        • Refactoring
          • Technical
          • Domain
        • Method level – results to simplest algorithm
        • Class level – results to simplest model
    43. TicTacToe TicTacToeTest T:14 F:0 E:0 S:14
    44. TicTacToe TicTacToeTest T: 16 F:0 E:0 S: 16 TicTacToe
    45. TicTacToe TicTacToeTest T: 14 F:0 E:0 S: 14 TicTacToe
    46. TicTacToe TicTacToeTest T: 16 F:0 E:0 S: 16 TicTacToe
    47. TicTacToe TicTacToeTest T:16 F:0 E:0 S: 14 TicTacToe Compile Error
    48. TicTacToe TicTacToeTest T:16 F: 1 E:0 S:14 TicTacToe +move(..) +getBoard() GameOverException Board MarkedPosition Mark
    49. TicTacToe TicTacToeTest T:16 F:1 E:0 S:14 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) MarkedPosition Mark
    50. TicTacToe TicTacToeTest T:16 F:1 E:0 S:14 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) MarkedPosition BoardTest T:1 F:1 E:0 S:0 Mark
    51. TicTacToe TicTacToeTest T:16 F: 0 E:0 S:14 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +equals(..) +hashCode() +toString() MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() BoardTest T: 1 F: 0 E:0 S:0 Mark
    52. TicTacToe TicTacToeTest T:16 F: 0 E:0 S: 12 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +equals(..) +hashCode() +toString() MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() BoardTest T: 1 F: 0 E:0 S:0 Compile Error IllegalMoveException Mark
    53. TicTacToe TicTacToeTest T:16 F: 1 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() +getPosition() BoardTest T:1 F:0 E:0 S:0 IllegalMoveException Position Mark Board +set(..) +contains(..) +equals(..) +hashCode() +toString()
    54. TicTacToe TicTacToeTest T:16 F:1 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() +getPosition() BoardTest T: 3 F:0 E:0 S: 2 IllegalMoveException Position Mark Board +set(..) +contains(..) +equals(..) +hashCode() +toString()
    55. TicTacToe TicTacToeTest T:16 F:1 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() +getPosition() BoardTest T: 3 F:0 E:0 S: 2 IllegalMoveException Position Mark Board +set(..) +contains(..) +equals(..) +hashCode() +toString()
    56. TicTacToe TicTacToeTest T:16 F:1 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() +getPosition() BoardTest T:3 F: 1 E:0 S: 0 IllegalMoveException Position Mark Board +set(..) +contains(..) +equals(..) +hashCode() +toString()
    57. TicTacToe TicTacToeTest T:16 F:1 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() +getPosition() BoardTest T:3 F:1 E:0 S:0 IllegalMoveException Position +equals(..) +hashCode() +toString() Mark Board +set(..) +contains(..) +equals(..) +hashCode() +toString()
    58. TicTacToe TicTacToeTest T:16 F: 0 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getEffectiveColumn() +getEffectiveRow() +getMark() +getPosition() BoardTest T:3 F: 0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    59. TicTacToe TicTacToeTest T:16 F:0 E:0 S:12 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:3 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    60. TicTacToe TicTacToeTest T: 17 F:0 E: 1 S: 11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:3 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    61. TicTacToe TicTacToeTest T:17 F:0 E:1 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:3 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    62. TicTacToe TicTacToeTest T:17 F:0 E:1 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:3 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Compile Error Compile Error
    63. TicTacToe TicTacToeTest T:17 F:0 E:1 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:3 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    64. TicTacToe TicTacToeTest T:17 F:0 E:1 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T: 5 F: 1 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    65. TicTacToe TicTacToeTest T:17 F: 1 E: 15 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F: 0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    66. TicTacToe TicTacToeTest T:17 F: 0 E: 0 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    67. TicTacToe TicTacToeTest T: 19 F: 2 E:0 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    68. TicTacToe TicTacToeTest T:19 F: 0 E:0 S:11 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    69. TicTacToe TicTacToeTest T:19 F:0 E:0 S: 10 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    70. TicTacToe TicTacToeTest T: 18 F:0 E:0 S:10 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark
    71. TicTacToe TicTacToeTest T:18 F:0 E:0 S: 9 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Compile Error Compile Error
    72. TicTacToe TicTacToeTest T:18 F: 1 E:0 S:9 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result
    73. TicTacToe TicTacToeTest T:18 F: 0 E:0 S:9 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result
    74. TicTacToe TicTacToeTest T:18 F:0 E:0 S: 8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Compile Error Compile Error
    75. TicTacToe TicTacToeTest T:18 F: 1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result
    76. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Compile Error Compile Error
    77. TicTacToe TicTacToeTest T:18 F: 0 E: 14 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:5 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +areAllTheSame()
    78. TicTacToe TicTacToeTest T:18 F:0 E:14 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T: 6 F:0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Compile Error Compile Error Line +areAllTheSame()
    79. TicTacToe TicTacToeTest T:18 F:0 E:14 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:6 F: 1 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +areAllTheSame()
    80. TicTacToe TicTacToeTest T:18 F: 1 E: 0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:6 F:1 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +areAllTheSame()
    81. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() BoardTest T:6 F: 0 E:0 S:0 IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +areAllTheSame() +equals(..) +hashCode() +toString()
    82. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line + isStraight () +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:2 F:0 E:0 S:0
    83. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:2 F: 1 E:0 S:0
    84. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:2 F: 0 E:0 S:0
    85. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:2 F:0 E:0 S:0
    86. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:2 F:0 E:0 S:0 Compile Error Compile Error
    87. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:2 F:0 E:0 S:0
    88. TicTacToe TicTacToeTest T:18 F:1 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() + isMarkedTheSame () +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T: 6 F: 3 E:0 S:0
    89. TicTacToe TicTacToeTest T:18 F: 0 E:0 S:8 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() + isMarkedTheSame () +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T: 6 F: 0 E:0 S:0
    90. TicTacToe TicTacToeTest T:18 F: 1 E:0 S: 7 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() + isMarkedTheSame () +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:6 F:0 E:0 S:0
    91. TicTacToe TicTacToeTest T:18 F:1 E:0 S:7 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() + isMarkedTheSame () +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T: 7 F: 1 E:0 S:0
    92. TicTacToe TicTacToeTest T:18 F: 0 E:0 S:7 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:7 F:1 E:0 S:0
    93. TicTacToe TicTacToeTest T:18 F:0 E:0 S:7 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:7 F: 0 E:0 S:0
    94. TicTacToe TicTacToeTest T:18 F: 1 E: 1 S: 5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:7 F:0 E:0 S:0
    95. TicTacToe TicTacToeTest T:18 F:1 E:1 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T: 9 F: 2 E:0 S:0
    96. TicTacToe TicTacToeTest T:18 F:1 E:1 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F:2 E:0 S:0 Compile Error Compile Error
    97. TicTacToe TicTacToeTest T:18 F:1 E:1 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F:2 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 Compile Error Compile Error
    98. TicTacToe TicTacToeTest T:18 F:1 E:1 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F:2 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 Compile Error Compile Error NumberUtil +getOrder(..)
    99. TicTacToe TicTacToeTest T:18 F:1 E:1 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F:2 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 Compile Error Compile Error NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    100. TicTacToe TicTacToeTst T:18 F: 2 E: 0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F: 0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    101. TicTacToe TicTacToeTest T:18 F: 3 E:0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    102. TicTacToe TicTacToeTest T:18 F:3 E:0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:6 F:0 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0 Compile Error Compile Error
    103. TicTacToe TicTacToeTest T:18 F:3 E:0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T: 7 F:0 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0 Compile Error Compile Error
    104. TicTacToe TicTacToeTest T:18 F: 0 E: 14 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:7 F: 1 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    105. TicTacToe TicTacToeTest T:18 F: 2 E: 0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:7 F: 0 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    106. TicTacToe TicTacToeTest T:18 F:2 E:0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:7 F:0 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0 Compile Error Compile Error
    107. TicTacToe TicTacToeTest T:18 F: 0 E: 14 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:7 F:0 E:0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    108. TicTacToe TicTacToeTest T:18 F:0 E:14 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T: 11 F:0 E: 4 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    109. TicTacToe TicTacToeTest T:18 F:0 E: 0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E: 0 S:0 LineTest T:9 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    110. TicTacToe TicTacToeTest T:18 F:0 E:0 S:5 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E:0 S:0 LineTest T: 4 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    111. TicTacToe TicTacToeTest T:18 F: 1 E:0 S: 3 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E:0 S:0 LineTest T:4 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    112. TicTacToe TicTacToeTest T:18 F: 0 E:0 S:3 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E:0 S:0 LineTest T:4 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    113. TicTacToe TicTacToeTest T:18 F:0 E:0 S: 1 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E:0 S:0 LineTest T:4 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    114. TicTacToe TicTacToeTest T:18 F: 1 E:0 S: 0 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E:0 S:0 LineTest T:4 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    115. TicTacToe TicTacToeTest T:18 F: 0 E:0 S:0 TicTacToe +move(..) +getBoard() GameOverException Board +set(..) +isMarked(..) +contains(..) +getColumn(..) +getDiagonals(..) +getRow(..) +equals(..) +hashCode() +toString() MarkedPosition +getMark() +getPosition() +equals(..) +hashCode() +toString() +compareTo(..) IllegalMoveException Position +getEffectiveColumn() +getEffectiveRow() +equals(..) +hashCode() +toString() Mark Result Line +isStraight() +isMarkedTheSame() +equals(..) +hashCode() +toString() BoardTest T:11 F:0 E:0 S:0 LineTest T:4 F:0 E:0 S:0 NumberUtilTest T:3 F:0 E:0 S:0 NumberUtil +getOrder(..) MarkedPositionTest T:5 F:0 E:0 S:0
    116. Thank you ^_^
    117. References
      • Xunit Test Patterns
      • Working Effectively with Legacy Code
      • http://www.mockobjects.com/
      • http://tech.groups.yahoo.com/group/testdrivendevelopment/
      • http://sites.google.com/site/tddproblems/
      • http://code.google.com/p/tic-tac-toe-tdd/
      • http://code.google.com/p/appfuse-top-to-bottom-tdd/

    + franzseefranzsee, 1 month ago

    custom

    399 views, 1 favs, 0 embeds more stats

    This is the presentation slides for Automated Testi more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 399
      • 399 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 24
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories