Un Cas de Test pour l'illustrer:
Le code Java avec un vararg la prise de déclaration de méthode (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 JUnit4 cas de test) appelle le ci-dessus (nous utilisons le test de ne pas tester n'importe quoi, juste pour générer de la puissance de 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écution de cette comme un test Unitaire, on obtient:
sendNothing(): a reçu un 'x' est un tableau de taille 0
sendNullWithNoCast(): a reçu un 'x' est null
sendNullWithCastToString(): a reçu un 'x' est un tableau de taille 1
sendNullWithCastToArray(): a reçu un 'x' est null
sendOneValue(): a reçu un 'x' est un tableau de taille 1
sendThreeValues(): a reçu un 'x' est un tableau de taille 3
sendArray(): a reçu un 'x' est un tableau de taille 3
Afin de rendre cela plus intéressant, nous allons l'appeler l' receive()
fonction de Groovy 2.1.2 et voir ce qui se passe. Il s'avère que les résultats ne sont pas les mêmes! Cela peut ê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 cette comme un test JUnit rendements suivants, à la différence de Java en caractères gras.
sendNothing(): a reçu un 'x' est un tableau de taille 0
sendNullWithNoCast(): a reçu un 'x' est null
sendNullWithCastToString(): a reçu un 'x' est null
sendNullWithCastToArray(): a reçu un 'x' est null
sendOneValue(): a reçu un 'x' est un tableau de taille 1
sendThreeValues(): a reçu un 'x' est un tableau de taille 3
sendArray(): a reçu un 'x' est un tableau de taille 3