Το σύστημα κάλυψης δοκιμής λέει «κανείς δεν έχει πρόσβαση σε όλο το πεδίο αυτό κατά τη διάρκεια των δοκιμών μονάδα σας». Αυτό είναι ό, τι το κόκκινο μέσα bar. Έτσι για να το πάρει για να πάει μακριά θα πρέπει να εκτελέσετε κώδικα που έχει πρόσβαση αυτό το πεδίο. Χρησιμοποιώντας τον προβληματισμό για την πρόσβαση στο χώρο για να αυξηθεί η κάλυψη δοκιμή μονάδα είναι ανοησίες. Ακόμα κι αν μπορεί να μετατρέψει το πράσινο πεδίο, δεν είναι στην πραγματικότητα χρησιμοποιώντας το πεδίο με ουσιαστικό τρόπο.
Ο σωστός τρόπος για να γίνει αυτό είναι να ασκήσει την τάξη τεστ με τέτοιο τρόπο ώστε χρήσεις ότι το πεδίο. Η serialVersionUID χρησιμοποιείται κατά τη διάρκεια της σειριακής / deserialization να αποφασίσει αν τα bytes που διαβάζεται ταιριάζει με το αντικείμενο που προσπαθείτε να υπόσταση.
Εδώ είναι ένα απλό παράδειγμα που καλύπτει ό, τι θέλετε. Πρόσθεσα ένα τεστ ισότητα στο τέλος, γιατί αυτό είναι πραγματικά αυτό που πρέπει να τον έλεγχο όταν ανησυχούν για τη διαδικασία σειριοποίησης / deserialization.
package org.does.not.exist;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import static org.assertj.core.api.Assertions.assertThat;
class Foo implements Serializable {
private static final long serialVersionUID = 42L;
public Foo(String value) {
this.value = value;
}
private String value;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Foo)) return false;
Foo foo = (Foo) o;
return value != null ? value.equals(foo.value) : foo.value == null;
}
@Override
public int hashCode() {
return value != null ? value.hashCode() : 0;
}
}
class StackoverflowTest {
@Test
void test() throws Exception {
Foo foo = new Foo("a string!");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(foo);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bis);
Foo copied = (Foo) in.readObject();
assertThat(foo).isEqualTo(copied);
}
}
Έτσι κάνετε το παραπάνω, αλλά αντικαταστήστε Foo με τη δική σας κατηγορία και θα πρέπει να πάρει την κάλυψη.