Unit Tests: Exercise
- Write simple unit tests using the JUnit framework.
Exercise complete the implementation of the following unit tests:
@Test
@DisplayName("get() returns the default value after IndexedList is instantiated.")
void testGetAfterConstruction() {
// TODO Implement me!
}
@Test
@DisplayName("put() changes the default value after IndexedList is instantiated.")
void testPutChangesValueAfterConstruction() {
// TODO Implement me!
}
@Test
@DisplayName("put() overwrites the existing value at given index to provided value.")
void testPutUpdatesValueAtGivenIndex() {
// TODO Implement me!
}
When you run your tests, they must all pass.
Solution
@Test
@DisplayName("get() returns the default value after IndexedList is instantiated.")
void testGetAfterConstruction() {
IndexedList<Integer> numbers = new ArrayIndexedList<>(5, 10);
for (int index = 0; index < numbers.length(); index++) {
assertEquals(10, numbers.get(index));
}
}
@Test
@DisplayName("put() changes the default value after IndexedList is instantiated.")
void testPutChangesValueAfterConstruction() {
IndexedList<Integer> numbers = new ArrayIndexedList<>(5, 10);
numbers.put(2, 7);
assertEquals(7, numbers.get(2));
}
@Test
@DisplayName("put() overwrites the existing value at given index to provided value.")
void testPutUpdatesValueAtGivenIndex() {
IndexedList<Integer> numbers = new ArrayIndexedList<>(5, 10);
numbers.put(1, 8);
assertEquals(8, numbers.get(1));
numbers.put(1, -5);
assertEquals(-5, numbers.get(1));
}
Exercise What other unit tests can we add to IndexedListTest
? You don't need to write the tests, only describe them.
Solution
Here are some ideas:
- Test
get
andlength
have no side effects; that is, calling it will not cause any changes to the data structure. - Test
put
has no unintended effects; for example, it does not change the size of the data structure, nor does it change a value at another index.