Algorithms and OOD (CSC 207 2013F) : Labs
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] [FAQ] [IRC] [Teaching & Learning]
Current: [Assignment] [EBoard] [Lab] [Outline] [Partners] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Partners] [Readings]
Reference: [Java 7 API] [Java Code Conventions]
Related Courses: [CSC 152 2006S (Rebelsky)] [CSC 207 2013S (Walker)] [CSC 207 2011S (Weinman)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker (Course)] [Issue Tracker (Textbook)]
Summary: In this laboratory, you will explore the JUnit unit testing framework, Eclipse's facilities for using JUnit, and the basics of Unit testing.
Make sure you’ve read the related reading. You may find it helpful to have it open in a separate tab.
Fork and clone the repository at https://github.com/Grinnell-CSC207/lab-unit-testing
(alternately git@github.com:Grinnell-CSC207/lab-unit-testing.git
).
a. Create a JUnit Test Case for the c2f
method in the
SampleMethods
class. That is,
C2FTest
.
taojava.labs.testing.SampleMethods
.
c2f
.
b. Click the
button and observe what happens.
c. Replace the body of the testC2F
(or just
test
) method with assertEquals(0,0)
.
Then click the button and observe
what happens.
d. Create a second method that looks like the following:
public void test2() { fail("Not yet implemented"); } // test2()
e. What do you expect to happen when you run your test?
f. Check your answer experimentally.
g. Insert the annotation @Test
before the declaration
of test2
. Then determine what happens
when you run your test code.
h. Change the body of test2
to the following. Then
observe what happens when you run your test code.
assertEquals("stupid test", 10, 3*5);
Yes, this test is supposed to fail. It's there
to demonstrate that (a) you can add a message
to assertEquals
, (b) you can include
computations in the body of assertEquals
, and
(c) assertEquals
treats the first non-message
value as the expected value and the second value as the received value.
You've seen how Eclipse lets you create and run tests. Now it's time to write a few of your own.
a. We know that 0 degrees Celsius is 32 degrees Fahrenheit. Write
a test that verifies that SampleMethods.c2f
computes the
expected value.
b. We know that 100 degrees Celsius is 212 degrees Fahrenheit. Write
a test that verifies that SampleMethods.c2f
computes the
expected value.
c. Run your tests.
d. If your tests reveal errors in c2f
, correct the code.
Then run the tests again.
e. Write any other tests you think are relevant. If the tests reveal errors, correct the code and then run the tests again.
a. Read the documentation for sum
b. Create a new test class and write some simple tests for
sum
. Note that you can create an
array of integers with the following instruction.
int[] values = { 1, 2, 3 };
c. Attempt to fix any errors that your tests revealed.
d. Write a few more tests. Fix any more errors that you notice.
e. Consider the following test. Does it meet the preconditions
of sum
? Do you expect your code to pass
the test?
public static void testExtremes() { int tmp = Integer.MAX_VALUE - 10; int[] values = { tmp, tmp, -tmp, -tmp }; asssertEquals("extreme test", 0, sum(values)); } // testExtremes
f. If your code does not pass the test, you have multiple options.
One option is to fix your code to handle situations like this. Another
is to rewrite the preconditions (e.g., "For every subset of ints,
the sum of that subset is greater than Integer.MIN_VALUE
and less than Integer.MAX_VALUE
). Another is to say that
the test is so stupid that it shouldn't matter. Which do you prefer?
Read the documentation for the expt
method.
Rather than writing individual test cases for this function, we should be able to write a loop that does multiple test cases. Something like the following:
Let expected be 1 For power = 0 to K Confirm that expected = expt(2,power) expect = expected * 2
a. Create a new test class and then add a test that follows that strategy.
b. Determine if expt
works as advertised.
It probably won't. But debugging the code is a task for another day.
Instead, we're going to write more tests.
c. Right now, your test only uses a base of 2. Rewrite your test so that it tries multiple bases, both positive and negative.
Write tests for the removeAs
method.
Fix the method if necessary.
Write tests for the removeBs
method.
Fix the method if necessary.
Incorporate tests from other groups for
removeAs
and removeBs
and see if your repaired code passes their tests, too.
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] [FAQ] [IRC] [Teaching & Learning]
Current: [Assignment] [EBoard] [Lab] [Outline] [Partners] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Partners] [Readings]
Reference: [Java 7 API] [Java Code Conventions]
Related Courses: [CSC 152 2006S (Rebelsky)] [CSC 207 2013S (Walker)] [CSC 207 2011S (Weinman)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker (Course)] [Issue Tracker (Textbook)]
Copyright (c) 2013 Samuel A. Rebelsky.
This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this
license, visit http://creativecommons.org/licenses/by/3.0/
or send a letter to Creative Commons, 543 Howard Street, 5th Floor,
San Francisco, California, 94105, USA.