I am very new to JUnit testing, I am trying to test the following very simple class
public interface IItemsService extends IService {
public final String NAME = "IItemsService";
/** Places items into the database
* @return
* @throws ItemNotStoredException
*/
public boolean storeItem(Items items) throws ItemNotStoredException;
/** Retrieves items from the database
*
* @param category
* @param amount
* @param color
* @param type
* @return
* @throws ItemNotFoundException
*/
public Items getItems (String category, float amount, String color, String type) throws ItemNotFoundException;
}
This is what I have for the test but I keep getting null pointer, and another error about it not being applicable for the argument… obviously I am doing something stupid but I am not seeing it. Could someone point me in the right direction?
public class ItemsServiceTest extends TestCase {
/**
* @throws java.lang.Exception
*/
private Items items;
private IItemsService itemSrvc;
protected void setUp() throws Exception {
super.setUp();
items = new Items ("red", 15, "pens", "gel");
}
IItemsService itemsService;
@Test
public void testStore() throws ItemNotStoredException {
try {
Assert.assertTrue(itemSrvc.storeItem(items));
} catch (ItemNotStoredException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println ("Item not stored");
}
}
@Test
public void testGet() throws ItemNotStoredException {
try {
Assert.assertFalse(itemSrvc.getItems(getName(), 0, getName(), getName()));
} catch (ItemNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
You’re not creating an instance of the class under test, you’re only declaring it as the interface. In each of your tests you should create an instance of the class under test and test it’s implementation of the method. Note also, your tests should not be dependent on one another. You shouldn’t rely on them running in particular order; any set up for a test should be done in the test set up method, not by another test.
Generally you want to use the AAA (Arrange, Act, Assert) pattern in your tests. The setUp (arrange) and tearDown (assert) can be part of this, but the pattern should also be reflected in each test method.