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 and length 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.