In order to fix a bug in an application, I modified a method named postLogin
by adding a call to an existing method named getShoppingCart
.
Code
protected void postLogin() {
getShoppingCart();
}
However, I'm not sure what the best way to write a unit test for postLogin
is.
Approach 1
Use verify from Mockito to simply verify that the method was called.
verify(mock).getShoppingCart();
Approach 2
Test the side effect of the method call by fetching the value of the user's shopping cart.
AssertNotNull(user.getShoppingCart());
Is one approach better than the other?
getShoppingCart()
method has side-effects, you don't need to test that it's called. If it does have side effects, you should really change its name becausegetXXX()
methods conventionally should be idempotent.getNextValue
? Arguably, someone could say "Don't call it a getter; change the name tonextValue
", but I have seengetNext
used before. Perhaps a better example would be an object representing an electron; what happens when I callgetPosition
? Or worse,getPosition(); getVelocity();