Mockito lorsque().thenReturn appelle la méthode inutilement

Je travaille un peu sur un hérité de code.
J'ai écrit un test qui est censé attraper NullPointerException (pour qu'il essaie d'appeler une méthode de l'objet null)

@Test(expected=NullPointerException.class)
public void checkXRequirement_NullProduct_AddAction_ShouldThrowNullPointerException() throws CustomException {
  Site site = mock(Site.class);
  Product product = null;
  when(BasketHelper.getAction(request)).thenReturn(0);
  when(BasketHelper.getActionProduct(site, request)).thenReturn(product);
  BasketHelper.requiresX(request, site);

}

Les Méthodes et les Variables:

public static final int ACTION_ADD = 0;
public static final int ACTION_DELETE = 1;

protected static int getAction(HttpServletRequest a_request) {
  String sBuyProduct = a_request.getParameter(ATTRIBUTE_NAME_BUY_PRODUCT);
  String sBuyProduct = a_request.getParameter(ATTRIBUTE_NAME_BUY_PRODUCT);

  if (sBuyProduct != null) iAction = ACTION_ADD;
  else (sDelProduct != null) iAction = ACTION_DELETE;

  return iBasketAction
}

protected static Product getActionProduct(Site a_site, HttpServletRequest a_request) {

    String sBuyProduct = a_request.getParameter(ATTRIBUTE_NAME_BUY_PRODUCT);
    String sDelProduct = a_request.getParameter(ATTRIBUTE_NAME_DEL_PRODUCT);
    String sProduct = null;

    switch (getBasketAction(a_request)) {
        case BASKET_ACTION_ADD:
        sProduct = sBuyProduct;
    break;
        case BASKET_ACTION_DELETE:
        sProduct = sDelProduct;
    break;
    }

    int iProductId;
    try {
        iProductId = Integer.parseInt(sProduct);
    } catch (NumberFormatException nbrEx) {
        return null;
    }

    Product prod = getProductById(iProductId);

    if (prod.isMasterProduct()) {
        prod = getChildProduct(prod, a_site, a_request);
    }

    return prod;
}


public static boolean requiresX(HttpServletRequest request, Site site) throws CustomException {
  try{
    if (getAction(request) == ACTION_ADD) { 
    Product prod = getActionProduct(site, request);
    return prod.getType().isRequiredX();
    }  
  } catch(NullPointerException exception) {
    log.error("Error Message", exception);
  }
  return false;
}

JUnit résultat de l'exécution du test est un échec avec la trace de la pile d':

java.lang.Exception: Unexpected exception, expected<java.lang.NullPointerException> but was<org.mockito.exceptions.misusing.WrongTypeOfReturnValue>
Caused by: org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Integer cannot be returned by getParameter()
getParameter() should return String#

Dois-je l'interpréter comment quand().thenReturn est censé travailler ici? Je veux juste getAction pour retourner 0 et getActionProduct à retourner la valeur null à chaque fois qu'il est appelé. Clairement getParameter() est appelée et je ne sais pas exactement pourquoi.

Pouvez-vous montrer getProduct()?
Dans d'autres nouvelles.... Je peux voir pourquoi vous écrivez ce genre de test pour reproduire un problème. Cependant, le véritable test ici doit être de vérifier que si les product est null, la requiresX méthode n'est pas appelée. À moins que votre hérité de code à l'aide de la npe pour contrôler le flux de code? Dans ce cas - rip que trop.
Je pense que vous avez raison. l'évolution de la condition dans requiresX méthode est probablement une bonne idée.

OriginalL'auteur Krzysztof Jarzyna | 2013-08-20