Ich habe AtCoder gestartet. Procon macht Spaß, weil es eine Gehirnübung ist! Ich dachte nur, ich mache es
Das ist. Aber ich kann es mir nicht leisten, einen Unit-Test zu schreiben ... Können Sie es leichter überprüfen ...
Also habe ich es versucht.
Die Umgebung sollte Folgendes erfüllen:
Dieses Mal werden wir das folgende Problem als Beispiel lösen. A-Willkommen bei AtCoder
Problemstellung
Herr Takahashi möchte die Daten verarbeiten. Gegeben sind die ganzen Zahlen $ a, b, c $ und die Zeichenfolge $ s $. Zeigen Sie die Ganzzahl $ a + b + c $ und die Zeichenfolge $ s $ nebeneinander an.
Eingabe
Die Eingabe erfolgt im folgenden Format.
Eingang
a
b c
s
Ausgabe
Drucken Sie $ a + b + c $ und $ s $ in die durch Leerzeichen getrennte Zeile $ 1 $. ** Fügen Sie außerdem am Ende der Ausgabe einen Zeilenumbruch ein. ** **.
Schreiben Sie den Testfall in eine Textdatei, damit Sie den Testfall in die Standardeingabe eingeben können.
input.txt
1
2 3
test
Lassen Sie uns anhand der Beispielantwort von AtCoder überprüfen.
Main.java
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//Eingabe einer Ganzzahl
int a = sc.nextInt();
//Geben Sie durch Leerzeichen getrennte Ganzzahlen ein
int b = sc.nextInt();
int c = sc.nextInt();
//Eingabe der Zeichenkette
String s = sc.next();
//Ausgabe
System.out.println((a+b+c) + " " + s);
}
}
Alles, was Sie tun müssen, ist, diesen Testfall in die Standardeingabe zu leiten.
terminal
$ javac Main.java #Da es Java ist, kompilieren Sie es
$ cat input.txt | java Main #Lauf
#Ausgabeergebnis
6 test
Wenn Sie mit dem Ausgabebeispiel vergleichen möchten, können Sie die verschiedenen Teile mit dem Befehl diff
leicht finden.
Erstellen Sie zunächst eine Textdatei des Ausgabebeispiels.
expected.txt
6 text
Sie können dies überprüfen, indem Sie den folgenden Befehl ausführen.
terminal
$ javac Main.java #Da es Java ist, kompilieren Sie es
$ cat input.txt | java Main > output.txt #Lauf&In Datei schreiben
$ diff -u expected.txt output.txt
#Keine Ausgabe bei genauer Übereinstimmung
Alles was Sie tun müssen, ist dies in ein Shell-Skript zu schreiben und es auf eine schöne Weise zusammenzusetzen, und Sie sind fertig!
test.sh
#!/bin/sh
javac Main.java #Da es Java ist, kompilieren Sie es
cat input.txt | java Main > output.txt #Lauf&In Datei schreiben
diff -u expected.txt output.txt
Sammeln Sie alle Verzeichnisstrukturen im selben Verzeichnis wie unten gezeigt.
terminal
$ tree .
├── input.txt
├── expected.txt
└── test.sh
Lauf
$ sh test.sh
Unten ist das Shell-Skript, das ich gemacht habe. Zu Ihrer Information.
GitHub https://github.com/terappy/auto-test-tool
test.sh
#!/bin/sh
CMDNAME=`basename $0`
# get option
while getopts e: OPT
do
case $OPT in
"e" ) FLG_E="TRUE" ; VALUE_E="$OPTARG" ;;
* ) echo "Usage: $CMDNAME [-e VALUE] PARAMETERS" 1>&2
exit 1 ;;
esac
done
# remove option value
shift `expr $OPTIND - 1`
# check the number of arguments
if [ $# -ne 2 ]; then
echo "Usage: $CMDNAME classname input-file-name" 1>&2
exit 1
fi
echo "---------------------"
echo "input is":
echo "---------------------"
cat $2
echo ""
echo "---------------------"
echo "output is":
echo "---------------------"
# decide output file name.
OUTFILE_NAME="out-$2"
# compile the target java file.
javac $1.java
# execute with input file and write result into $OUTFILE_NAME
cat $2 | java $1 > $OUTFILE_NAME
cat $OUTFILE_NAME
if [ "$FLG_E" = "TRUE" ]; then
echo ""
echo "---------------------"
echo "verification result":
echo "---------------------"
# verification
if diff -u $VALUE_E $OUTFILE_NAME ; then
echo "====================="
echo "All matched!!"
echo "====================="
else
echo "====================="
echo "Miss matched"
echo "====================="
fi
fi
Mach Folgendes: Geben Sie die folgenden Argumente ein.
$ sh test.sh ${CLASS_NAME} ${INPUT_TEXTFILE}
or
Bei der Überprüfung mit dem Ausgabebeispiel
$ sh test.sh -e ${EXPECTED_RESULT_TEXTFILE} ${CLASS_NAME} ${INPUT_TEXTFILE}
$ sh test.sh -e expected.txt Main input.txt
Für Java verwenden viele Leute IntelliJ als IDE. IntelliJ verfügt über ein praktisches Plug-In namens CHelper, das in Procon verwendet werden kann. Dies erleichtert die Ausführung des Testfalls, den ich dieses Mal durchgeführt habe, und ermöglicht es Ihnen, die Klasse und Methode für die Eingabe und Ausgabe anzugeben. Wenn Sie einen professionellen Computer in Java erstellen möchten, sollten Sie diesen ← verwenden.
Die Beantwortungszeit ist in Procon wertvoll, und die Überprüfung ist eine Aufgabe, die häufig ausgeführt wird. Daher halte ich es für ein Muss, auf diese Weise schnell mit einem Skript überprüfen zu können. Ich bin froh, wenn Sie es als Referenz verwenden können.
Recommended Posts