2017-09-26 7 views
1

J'ai créé une méthode pour compter l'occurrence d'un caractère donné dans String.Différence de test JUnit entre assertEquals() et Assert.assertEquals()

public Integer numberOf(String str, Character a){} 

J'ai essayé de tester normalement en utilisant:

@Test 
public void test1(){ 
    Integer result = oc.numberOf("Lungimirante", 'u'); 
    Assert.assertEquals(1, result); 
} 

mais Eclipse il se plaint.

Je googlé et je trouve que pour le tester je avais besoin d'utilisation:

assertEquals(1, result); //it works correctly 

au lieu de: Assert.assertEquals(1, result);

Pourriez-vous me dire pourquoi? Quelle est la différence?

+0

Le 'affirmer [. Equals, etc]' invocations de méthode proviennent d'une importation statique la classe 'junit.framework.Assert' (ou' org.junit.Assert' etc.). Vous avez probablement une instruction 'import static junit.framework.Assert. *' Ou une instruction similaire, mais vous n'avez pas importé 'junit.framework.Assert'. – Mena

+0

@Mena: oui pour utiliser 'assertEquals' j'ai importé:' import static org.junit.Assert.assertEquals; ' et avant d'utiliser' Assert.assertEquals' importent seulement 'org.junit.Assert;' – SwampThing

+0

Je déteste autoboxing et Ceci est une des raisons. Obtenir 'NullPointerExceptions' où vous ne les attendez pas en est une autre. Pour cette raison j'ai configuré Eclipse pour voir les occurrences d'autoboxing comme erreur (et IMHO il parle de lui-même qu'il y a une option pour ceci, que je ne me trompe pas avec mon opinion) – Lothar

Répondre

2

Vous ne fournissez pas de détails pour ceci:

Eclipse se plaint elle.

Je pense qu'il est un Ambiguous method call ...

enter image description here

... qui est causée par plusieurs qu'il y ait des « formes » de assertEquals qui prennent int, une longue partie de, un objet , un peu de chaîne etc etc

Donc, vous avez juste besoin d'être explicite sur lequel vous voulez utiliser. Par exemple, les deux assertEquals appels suivants compilent parce qu'ils sont explicites sur le type du expected et actual argument:

Integer result = oc.numberOf("Lungimirante", 'u'); 
Assert.assertEquals(new Integer(1), result); 
Assert.assertEquals(1, result.intValue()); 
+0

: le plainte: _la méthode assertEquals (Object, Object) est ambigu pour le type Assert_ – SwampThing

+0

@SwampThing oui, c'est ce que j'ai supposé pour que ma réponse soit pertinente à votre question. Modifiez juste vos invocations 'assertEquals' (en utilisant les exemples fournis dans ma réponse) afin que vous soyez clair sur le type des arguments' expected' et 'actual'. – glytching

+0

cela fonctionne bien avec votre suggestion. – SwampThing