If you can't read please download the document
Upload
franz-allan-see
View
9.242
Download
1
Embed Size (px)
Citation preview
Automated Testing in Java
By Franz [email protected]://twitter.com/franz_see
Problems?
Regression
Too much time Debugging
Waiting for your build to finish
Documentation that lies!
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); }}
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); }}
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); }}
The Parts (part3)
// name should be descriptive // i.e. test[Should] // i.e. test[Given][When][Then] public void testGetMimeType() {
MimeType mimeType = jpegImage.getMimeType();
// [descriptive message,] , assertEquals(MimeType.JPEG, mimeType); }
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
The Goal
ControllerServiceRepositoryDBMy Vaction PicC:\Pics\001.jpegName
File
Uploadshould store in repo
should persist in db
should persistinputs
should serverequests
functional
unit
unit
integration
Functional Testing
Tests the application as a whole
Regression for your application's features/ capability
Usually done byDriving the UI
Driving the layer just below the UI
GoalTo cover as much functionality
To be easy to read / write
Unit Testing
Testing the atomic parts of your code
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);}
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) {...}
}
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) {...}
}
Test Organization ::
Simple Test Per Class
public class ContainerTest extends TestCase {
public void testAdd() {...}
public void testGet() {...}
public void testReplace() {...}
public void testDelete() {...}
}
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() {...}}
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() {...} }}
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() {...} }}
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
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); }}
Isolating your unit
Test DoublesDummies
Mocks
Stubs
Spies
Fakes
Data Flow :: Code
public Entity createEntity(Long id, String name) { return new Entity(id, name);}
Data Flow :: Diagram
createEntity
id
name
Entity
processing
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;}
Data Flow
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
Data Flow
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
Direct Input
Indirect Input
Direct Output
Indirect Output
Collaborator
Test Doubles :: Dummies (part1)
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
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());}
Test Doubles :: Mocks (part1)
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
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);}
Test Doubles :: Stubs (part1)
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
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) {}}
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);}
Test Doubles :: Spies (part1)
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
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; }}
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());}
Test Doubles :: Fakes (part1)
createEntity
id
name
Entity
processing
registry
contains(..)
get(..)
store(..)
Test Doubles :: Fakes (part2)
public class FakeRegistry implements Registry { private final Map 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); }}
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);}
Integration Testing
When units interact with external dependenciesDatabase
Filesystem
Other applications/services
Time
Etc
Although external dependencies can be replaced by Test Doubles, tests might mean nothing if you do so.
Tip :: which test to start from
Go for top-down approach
When should you write tests
Test Last DevelopmentWhen you just want to bolt down whatever you've just finished
Test First DevelopmentYAGNI
KISS
When should you write tests
Test Driven DesignTFD + Refactor
RefactoringTechnical
Domain
Method level results to simplest algorithm
Class level results to simplest model
TicTacToe
TicTacToeTestT:14 F:0 E:0 S:14
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:16TicTacToe
TicTacToe
TicTacToeTestT:14 F:0 E:0 S:14TicTacToe
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:16TicTacToe
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:14TicTacToeCompile Error
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:14TicTacToe+move(..)+getBoard()GameOverExceptionBoardMarkedPositionMark
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:14TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)MarkedPosition
Mark
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:14TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)MarkedPositionBoardTestT:1 F:1 E:0 S:0
Mark
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:14TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+equals(..)+hashCode()+toString()
MarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()BoardTestT:1 F:0 E:0 S:0
Mark
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+equals(..)+hashCode()+toString()
MarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()BoardTestT:1 F:0 E:0 S:0
Compile ErrorIllegalMoveExceptionMark
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionMarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()+getPosition()BoardTestT:1 F:0 E:0 S:0IllegalMoveExceptionPositionMark
Board+set(..)+contains(..)+equals(..)+hashCode()+toString()
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionMarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:2IllegalMoveExceptionPositionMark
Board+set(..)+contains(..)+equals(..)+hashCode()+toString()
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionMarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:2IllegalMoveExceptionPositionMark
Board+set(..)+contains(..)+equals(..)+hashCode()+toString()
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionMarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()+getPosition()BoardTestT:3 F:1 E:0 S:0IllegalMoveExceptionPositionMark
Board+set(..)+contains(..)+equals(..)+hashCode()+toString()
TicTacToe
TicTacToeTestT:16 F:1 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionMarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()+getPosition()BoardTestT:3 F:1 E:0 S:0IllegalMoveExceptionPosition+equals(..)+hashCode()+toString()Mark
Board+set(..)+contains(..)+equals(..)+hashCode()+toString()
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getEffectiveColumn()+getEffectiveRow()+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:16 F:0 E:0 S:12TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:17 F:0 E:1 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:17 F:0 E:1 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:17 F:0 E:1 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:17 F:0 E:1 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:3 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:17 F:0 E:1 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:1 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:17 F:1 E:15 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:17 F:0 E:0 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:19 F:2 E:0 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:19 F:0 E:0 S:11TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:19 F:0 E:0 S:10TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:10TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:9TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:9TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
Result
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:9TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
Result
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultCompile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
Result
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultCompile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:0 E:14 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:5 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+areAllTheSame()
TicTacToe
TicTacToeTestT:18 F:0 E:14 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:6 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultCompile ErrorCompile ErrorLine+areAllTheSame()
TicTacToe
TicTacToeTestT:18 F:0 E:14 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:6 F:1 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+areAllTheSame()
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:6 F:1 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+areAllTheSame()
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()BoardTestT:6 F:0 E:0 S:0
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+areAllTheSame()+equals(..)+hashCode()+toString()
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:2 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:2 F:1 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:2 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:2 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:2 F:0 E:0 S:0Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:2 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:6 F:3 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:8TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:6 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:7TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:6 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:7TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:7 F:1 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:7TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:7 F:1 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:7TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:7 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:1 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:7 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:1 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:2 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:1 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:2 E:0 S:0Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:1 E:1 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:2 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:1 E:1 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:2 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0Compile ErrorCompile ErrorNumberUtil+getOrder(..)
TicTacToe
TicTacToeTestT:18 F:1 E:1 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:2 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0Compile ErrorCompile ErrorNumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTstT:18 F:2 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:3 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:3 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:6 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:3 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:7 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:0 E:14 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:7 F:1 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:2 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:7 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:2 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:7 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0Compile ErrorCompile Error
TicTacToe
TicTacToeTestT:18 F:0 E:14 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:7 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:14 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:4 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:9 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:5TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:4 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:3TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:4 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:3TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:4 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:1TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:4 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:1 E:0 S:0TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:4 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
TicTacToe
TicTacToeTestT:18 F:0 E:0 S:0TicTacToe+move(..)+getBoard()GameOverExceptionBoard+set(..)+isMarked(..)+contains(..)+getColumn(..)+getDiagonals(..)+getRow(..)+equals(..)+hashCode()+toString()
MarkedPosition+getMark()+getPosition()+equals(..)+hashCode()+toString()+compareTo(..)
IllegalMoveExceptionPosition+getEffectiveColumn()+getEffectiveRow()+equals(..)+hashCode()+toString()Mark
ResultLine+isStraight()+isMarkedTheSame()+equals(..)+hashCode()+toString()BoardTestT:11 F:0 E:0 S:0LineTestT:4 F:0 E:0 S:0NumberUtilTestT:3 F:0 E:0 S:0NumberUtil+getOrder(..)MarkedPositionTestT:5 F:0 E:0 S:0
Thank you ^_^
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/