Un cas de test pour illustrer ceci:
Le code Java avec une déclaration de méthode prenant vararg (qui se trouve être statique):
public class JavaReceiver {
public static String receive(String... x) {
String res = ((x == null) ? "null" : ("an array of size " + x.length));
return "received 'x' is " + res;
}
}
Ce code Java (un cas de test JUnit4) appelle ce qui précède (nous utilisons le cas de test pour ne rien tester, juste pour générer une sortie):
import org.junit.Test;
public class JavaSender {
@Test
public void sendNothing() {
System.out.println("sendNothing(): " + JavaReceiver.receive());
}
@Test
public void sendNullWithNoCast() {
System.out.println("sendNullWithNoCast(): " + JavaReceiver.receive(null));
}
@Test
public void sendNullWithCastToString() {
System.out.println("sendNullWithCastToString(): " + JavaReceiver.receive((String)null));
}
@Test
public void sendNullWithCastToArray() {
System.out.println("sendNullWithCastToArray(): " + JavaReceiver.receive((String[])null));
}
@Test
public void sendOneValue() {
System.out.println("sendOneValue(): " + JavaReceiver.receive("a"));
}
@Test
public void sendThreeValues() {
System.out.println("sendThreeValues(): " + JavaReceiver.receive("a", "b", "c"));
}
@Test
public void sendArray() {
System.out.println("sendArray(): " + JavaReceiver.receive(new String[]{"a", "b", "c"}));
}
}
L'exécuter en tant que test JUnit donne:
sendNothing (): reçu 'x' est un tableau de taille 0
sendNullWithNoCast (): reçu 'x' est nul
sendNullWithCastToString (): reçu 'x' est un tableau de taille 1
sendNullWithCastToArray (): reçu 'x' est nul
sendOneValue (): reçu 'x' est un tableau de taille 1
sendThreeValues (): reçu 'x' est un tableau de taille 3
sendArray (): reçu 'x' est un tableau de taille 3
Pour rendre cela plus intéressant, appelons la receive()
fonction de Groovy 2.1.2 et voyons ce qui se passe. Il s'avère que les résultats ne sont pas les mêmes! Cela peut cependant être un bug.
import org.junit.Test
class GroovySender {
@Test
void sendNothing() {
System.out << "sendNothing(): " << JavaReceiver.receive() << "\n"
}
@Test
void sendNullWithNoCast() {
System.out << "sendNullWithNoCast(): " << JavaReceiver.receive(null) << "\n"
}
@Test
void sendNullWithCastToString() {
System.out << "sendNullWithCastToString(): " << JavaReceiver.receive((String)null) << "\n"
}
@Test
void sendNullWithCastToArray() {
System.out << "sendNullWithCastToArray(): " << JavaReceiver.receive((String[])null) << "\n"
}
@Test
void sendOneValue() {
System.out << "sendOneValue(): " + JavaReceiver.receive("a") << "\n"
}
@Test
void sendThreeValues() {
System.out << "sendThreeValues(): " + JavaReceiver.receive("a", "b", "c") << "\n"
}
@Test
void sendArray() {
System.out << "sendArray(): " + JavaReceiver.receive( ["a", "b", "c"] as String[] ) << "\n"
}
}
L'exécution de ceci en tant que test JUnit donne les résultats suivants, la différence avec Java étant mise en évidence en gras.
sendNothing (): reçu 'x' est un tableau de taille 0
sendNullWithNoCast (): reçu 'x' est nul
sendNullWithCastToString (): reçu 'x' est nul
sendNullWithCastToArray (): reçu 'x' est nul
sendOneValue (): reçu 'x' est un tableau de taille 1
sendThreeValues (): reçu 'x' est un tableau de taille 3
sendArray (): reçu 'x' est un tableau de taille 3
asList
méthode dans l'échantillon et son objectif.