Ich bin ein Anfänger bezüglich Unit-Tests. Ich würde gerne Unit Tests für viele Key Value Paare schreiben, von denen die Values oftmals gleiche Bedingungen haben. Beispiel:
Ich habe viele kleine String Arrays, wobei der erste Wert ein Key ist und der zweite Wert ein Value (Ja, ich weiß, dass es bessere Implementierungen gibt).
Die Sache ist, dass das CI System nur den Methodennamen von dem Test ausgibt, wenn er fehlt schlägt.
Heißt, ich muss jeden key als einzelnen Test, mit sprechendem Namen schreiben:
Meine Fragen sind nun:
1. Ist das der richtige Ansatz zum testen?
2. Wie kann ich in meinem Code in der Funktion isValueValid die if-else if-Blöcke schöner gestalten?
Ich habe viele kleine String Arrays, wobei der erste Wert ein Key ist und der zweite Wert ein Value (Ja, ich weiß, dass es bessere Implementierungen gibt).
Java:
public static void main(String[] args) {
String[] kv1 = {"se", "Server is running"};
String[] kv2 = {"ap", "App is running"};
String[] kv3 = {"pr", "Printer is running"};
String[] kv4 = {"ra", "Radio is running"};
String[] kv5 = {"ws", "Website is not available"};
/*
*
* weitere kv-paare
*
*/
ArrayList<String[]> pairs = new ArrayList<>(Arrays.asList(kv1, kv2, kv3, kv4, kv5));
for (String[] kv : pairs) {
isValueValid(kv);
}
}
public static boolean isValueValid(String[] pair) {
if (pair[0].equals("se") || pair[0].equals("ab") || pair[0].equals("pr")) {
if (pair[1].length() > 50) {
System.out.println("Value is shouldn't contain more than 50 chars");
return false;
}
} else if (pair[0].equals("ra") || pair[0].equals("ws")) {
if (pair[1].length() > 100) {
System.out.println("Value is shouldn't contain more than 100 chars");
return false;
}
}
/*
*
* mehr Bedingungen für andere kv-paare
*
*/
return true;
}
Die Sache ist, dass das CI System nur den Methodennamen von dem Test ausgibt, wenn er fehlt schlägt.
Heißt, ich muss jeden key als einzelnen Test, mit sprechendem Namen schreiben:
Java:
private String[] pair = new String[2];
@Test
public void isServerValueValid(){
pair[0] = "se";
int criteria = 50; // defines maximum length
pair[1] = "";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = "abcdef";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria);
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria+1);
assertEquals(false, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria + 20);
assertEquals(false, TestKlasse.isValueValid(pair));
}
@Test
public void isAppValueValid(){
pair[0] = "ab";
int criteria = 50; // defines maximum length
pair[1] = "";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = "abcdef";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria);
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria+1);
assertEquals(false, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria + 20);
assertEquals(false, TestKlasse.isValueValid(pair));
}
@Test
public void isPrinterValueValid(){
pair[0] = "pr";
int criteria = 50; // defines maximum length
pair[1] = "";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = "abcdef";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria);
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria+1);
assertEquals(false, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria + 20);
assertEquals(false, TestKlasse.isValueValid(pair));
}
@Test
public void isRadioValueValid(){
pair[0] = "ra";
int criteria = 100; // defines maximum length
pair[1] = "";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = "abcdef";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria);
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria+1);
assertEquals(false, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria + 20);
assertEquals(false, TestKlasse.isValueValid(pair));
}
@Test
public void isWebsiteValueValid(){
pair[0] = "ws";
int criteria = 100; // defines maximum length
pair[1] = "";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = "abcdef";
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria);
assertEquals(true, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria+1);
assertEquals(false, TestKlasse.isValueValid(pair));
pair[1] = generateValueData(criteria + 20);
assertEquals(false, TestKlasse.isValueValid(pair));
}
private String generateValueData(int length){
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; i++){
sb.append("a");
}
return sb.toString();
}
Meine Fragen sind nun:
1. Ist das der richtige Ansatz zum testen?
2. Wie kann ich in meinem Code in der Funktion isValueValid die if-else if-Blöcke schöner gestalten?