Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
In this video we'll write a test to help give us an idea of whether or not our game is working!
Testing Comments
// arrange
// act
// assert
Kotlin Links
Project Files
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
We're all ready with our
debug print function and
0:00
we've got a pretty good idea about how we
can drive the game by using our presenter.
0:02
Now let's get to that test.
0:07
Let's start by adding a new
class to our test directory.
0:09
And let's name it GameTest.
0:15
Then inside this class,
0:17
let's add the test annotation, and
then create our test function.
0:21
To test our game,
0:27
we're going to see if we can get
a king into our first foundation pile.
0:29
So let's name this function,
kingInFirstFoundationPile.
0:33
Then let's add the arrange
act assert comments,
0:40
they're in the teacher's
notes below as well.
0:42
And for the arrange section it might
take us a few games to get a king into
0:49
the first foundation pile.
0:54
So let's declare a num games
property to keep track of
0:56
how many games have been played.
0:59
Var numGames, and let's start it at zero.
1:01
Let's also declare a max games property
to make sure we don't get stuck in
1:05
an infinite loop, val maxGames and
let's set it equal to 10,000.
1:09
Then in the act section
let's start with a for
1:17
loop that loops through
the max number of games.
1:20
For i in 1 to maxGames and
inside the loop let's
1:23
first increment our
numGames property by one.
1:28
Then let's reset the game,
GameModel.resetGame.
1:35
And next to simulate a game
being played let's tap the deck
1:41
then tap the waste pile and
then tap the last card and
1:45
each of the tableau tiles and
let's do all of that 100 times.
1:49
So let's start by creating a four loop,
to loop from one to 100.
1:53
For j in 1 to 100 and
1:57
then inside this loop, let's tap
the deck GamePresenter.onDeckTap,
2:04
then tap the waste pile,
GamePresenter.onWasteTap.
2:11
And then tap the last card and each tab
low pile GameModel.tableauPiles and
2:16
let's use the for each indexed function.
2:23
And for the index let's change this to
index and then inside this function
2:26
lets call GamePresenter.onTableauTap
pass in index for the Tableau index.
2:32
And for the second parameter to
tap the last card in each pile,
2:41
let's pass in the index of the last card.
2:45
tableauPile.cards.lastIndex.
2:48
Next, after we've tapped everything but
the foundation's 100 times.
2:56
Let's check and see if we've got
a king and the first foundation.
3:01
An easy way to do this is just to check
if the foundation has 13 cards in it.
3:04
The only way a foundation can have 13
cards in it is if it has a king on it.
3:09
So let's type if
GameModel.foundationPiles and
3:14
we want the 0 indexed
one .cards.size == 13.
3:21
And if it does equal 13,
then we've succeeded in getting a king.
3:28
So let's break out of our loop and
move on to the assert section.
3:34
In the assert section.
3:40
Let's start by printing out the game
model so we can see what's going on.
3:42
GameModel.debugPrint then on
the next one just for fun,
3:45
let's print out how many games were
played and I will call this num Games and
3:51
then we'll print out numGames.
3:57
Finally let's assert that
numGames is less than the max.
4:00
Assert that numGames
is less than maxGames.
4:05
So we're asserting that and less than
10,000 games we will get a king and
4:12
the first foundation pile,
which is a pretty good test.
4:17
All right, now for the moment of truth.
4:21
Let's click the Run button next to our
test to run it and see what we get.
4:24
Cool, and if we run it a few more times.
4:34
We should be able to find one where
we didn't completely finish the game,
4:37
Here we go, hey that's not quite right.
4:45
Some of these cards should be face down.
4:48
Well, it turns out that as part
of our decks reset function
4:50
we should also turn all
the cards face down.
4:54
So over on our deck class
before we shuffle the deck,
4:57
let's call cardsInDeck.forEach.
5:02
And for each card in the deck,
let's make it face down.
5:08
Face up equals false.
5:15
Then let's run our test a few more times.
5:18
Perhaps a lot more times.
5:29
And there we go,
our cards are back to being hidden.
5:40
I don't know about you but I'm feeling
a whole lot more confident in our game.
5:44
We haven't even played it and
5:49
yet thanks to our test, I'm pretty
sure it's going to work just fine.
5:50
I bet you didn't think we'd be able to get
all of this done in such a short time but
5:55
thanks to Colon we're able to do
a lot with just a little code.
6:00
From package level properties,
to extension functions, and
6:04
even to just not needing
to add semi-colons,
6:07
Colon does a great job at
making our lives a lot easier.
6:10
I hope you've learned
a ton from this course and
6:15
that you never forget any of it.
6:17
But if you do,
remember that the Colon docs are awesome.
6:20
So if you find yourself confused about
something just check out the docs.
6:23
If that doesn't work you can always
make a post in the community and
6:27
will be happy to help.
6:31
Until next time.
6:32
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up