Przypadek testowy ilustrujący to:
Kod Javy z deklaracją metody pobierającej vararg (która jest statyczna):
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;
}
}
Ten kod Java (przypadek testowy JUnit4) wywołuje powyższe (używamy przypadku testowego, aby niczego nie testować, tylko po to, aby wygenerować dane wyjściowe):
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"}));
}
}
Uruchomienie tego jako testu JUnit daje:
sendNothing (): otrzymane 'x' jest tablicą o rozmiarze 0
sendNullWithNoCast (): otrzymane 'x' jest null
sendNullWithCastToString (): otrzymano 'x' jest tablicą o rozmiarze 1
sendNullWithCastToArray (): odebrane „x” ma wartość null
sendOneValue (): otrzymane 'x' jest tablicą o rozmiarze 1
sendThreeValues (): otrzymane 'x' jest tablicą o rozmiarze 3
sendArray (): odebrane 'x' to tablica o rozmiarze 3
Aby było to bardziej interesujące, wywołajmy receive()
funkcję z Groovy 2.1.2 i zobaczmy, co się stanie. Okazuje się, że wyniki nie są takie same! Może to być jednak błąd.
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"
}
}
Uruchomienie tego jako testu JUnit daje następujące wyniki, z różnicą w stosunku do Java wyróżnioną pogrubioną czcionką.
sendNothing (): otrzymane 'x' jest tablicą o rozmiarze 0
sendNullWithNoCast (): otrzymane 'x' jest null
sendNullWithCastToString (): odebrane „x” ma wartość null
sendNullWithCastToArray (): odebrane „x” ma wartość null
sendOneValue (): otrzymane 'x' jest tablicą o rozmiarze 1
sendThreeValues (): otrzymane 'x' jest tablicą o rozmiarze 3
sendArray (): odebrane 'x' to tablica o rozmiarze 3
asList
metodę w próbce i jej cel.