Junit-test für die Methode boolean
wie kann ich erstellen Sie eine test-Methode mit asseertEquals für die Methode Boolean isEqual(Semester zu semester) mit dem Typ Boolean in der Klasse Semester?
hier ist der code für die Klasse, Semester und den junit-test für die Klasse Semester
Semester
public class Semester {
private String year;
private String name;
public Semester() {
year = null;
name = null;
}
public Semester(String year, String name) {
this.year = year;
this.name = name;
}
public boolean isEqual(Semester semestr) {
return ((semestr.name.equals(this.name)) && (semestr.year
.equals(this.year)));
}
public String getYear() {
return year;
}
public String getName() {
return name;
}
}
SemesterTest
public class SemesterTestCase1 {
private Semester semster=new Semester("2014","Fall");
@Test
public void testIsEqual() {
}
@Test
public void testGetYear() {
assertEquals("2014",semster.getYear());
}
@Test
public void testGetName() {
assertEquals("Fall",semster.getName());
}
}
assertEquals(true, actualValue)
undassertEquals(false, actualValue)
beide arbeiten. Es gibt auchassertTrue(actualValue)
undassertFalse(actualValue)
. Haben Sie einen Blick auf die JavaDoc für dieAsserts
- class? Wenn diese Optionen nicht funktionieren, bitte lassen Sie uns wissen, warum Sie nicht funktionieren, und noch wichtiger, was man eigentlich zu erreichen versucht.- Vergessen Sie nicht, um zu testen, für
NullPointerException
s. - Sie überschreiben müssen
equals
statt der Festlegung Ihrer eigenenisEqual
zu verwendenassertEquals
. - Nicht unbedingt.
equals
hat sehr spezielle Verträge, die gehorchen müssen, in der Erwägung, dass eine benutzerdefinierte Methode, wieisEqual
können tun, was Sie will. Es gibt definitiv Zeiten, die Sie wollen, und nicht die anderen. Zum Beispiel, sagen wir, Sie haben einePerson
Objekt mit einerid
Bereich sowie name und Geburtsdatum. Es wahrscheinlich sinnvoll fürequals
nur überprüfenid
, wenn man da einenMap<Person, Job>
Sie möchten, um Sie eindeutig zu identifizieren, jede person, die von id. Aber Sie können auch prüfen wollen, dass zweiPerson
Objekte haben alle die gleichen Werte, für die Sie eine benutzerdefinierteisEqual
mehr angemessen ist. - Können Sie Namen Regeln der equals-Vertrag die benutzerdefinierte Methode verletzen kann? Wenn in Ihrer Domäne können Sie garantieren, dass
Person.id
ist einzigartig, was ist der Punkt, der compering rest der Felder? Wenn nicht deine Karte wird nicht korrekt funktionieren. - Eine benutzerdefinierte Regel kann gegen eine der Regeln für
equals
, da es definiert seinen eigenen Vertrag. Wahrscheinlich die meisten relevant ist, dass Sie müssen konsistent sein mithashCode()
. Fürid
Gleichheit, als ein Beispiel, was passiert, wenn Sie haben zweiMap<Person, Job>
s, ein von einem Monat und eine aus jetzt, und Sie wollen, um Leute zu finden, die den Job gewechselt:!m1.get(person).equals(m2.get(person))
. Wenn eine person änderte Ihren Namen in diesem Monat, Sie wollen immer noch, Sie zu finden, die in beiden maps. - Aber, nun, ich denke, wir sind in Allgemeine-Diskussion-Kategorie, so dass, wenn Sie fortsetzen wollen, würde ich vorschlagen, einen chat und lud mich zu es. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, die ich ändern würde Ihre
isEqual()
:Versuchen mit assertTrue statt assertEquals:
Empfehle ich Ihnen, mit
assertTrue
undassertFalse
wenn Sie möchten, testen Boolesche Methoden.assertTrue
undassertFalse
, weil Sie nicht geben sehr hilfreiche Nachrichten. Diese überladungen nur im Grunde sagen Sie es ist ein Fehler. Wenn Sie etwas tun, wieassertTrue("fall 2014", res)
dann wird Ihre Nachricht unhelpfully nur "Herbst 2014." Wenn SieassertEquals
, dann wird die Fehlermeldung "Herbst 2014: erwartete <true,> aber war <falschen>", was für mich sehr hilfreich.assertTrue("fall 2014", res)
und der test fehlschlägt, müssen Sie wissen, dass die erwartete wurde wahr (durchassertTrue
) und res warfalse
(denn wenn es wahr wäre, den test korrekt waren) ist es nicht? Sind Sie richtig, wenn Sie sagen, dassassertEquals
mehr geben hilfreiche Nachricht, aber, den code zu Lesen,assertTrue
undassertFalse
bieten Ihnen eine schnelle Idee über das, was Sie testen. Ich glaube nicht, dassassertEquals
Ihnen eine Menge Vorteile. Ich denke, dass ist die Meinung basiert. Trotzdem danke für dein Kommentar 🙂assertThat(condition, equalTo(true))
isEqual()
. Ich denke, dass zwei semester mit einigen Variablen null ist nicht gleich. Auch, ich empfehle Ihnen, schreiben Sie eine weitere testtestIsNotEqual()
zu überprüfen, mit einemassertFalse
wenn SieisEqual
funktioniert gut mit zwei verschiedenen Semestern. Ich habe Bearbeiten Sie die Antwort mit einer möglichen neuenisEqual()
.assertTrue("expected fall 2014 equality to be true", res)
, aber an diesem Punkt, was habe ich gerettet vsassertEquals("fall 2014 equality", true, res)
? Ähnlich ist es mit der Hamcrest-Lösung. Im Grunde finde ichassertEquals
eine gute balance zwischen geben mir eine hilfreiche Nachricht, und weniger Tippfehler meinerseits. Aber ja, es ist völlig Meinung, das ist der Grund, warum ich es als Kommentar und nicht als Antwort. 🙂Gibt es drei Dinge, die zu einer Adresse mit diesem code.
Erste, es gibt schon eine Methode, die zwei Objekte vergleichen können, gleichwertig mit jeder anderen genannt
equals
. Sie wollen, diese Methode zu überschreiben, statt der Erstellung Ihrer eigenen Geschlechter-Methode.Zweite, Ihre Methode ist nicht null tolerant. Wenn man pass
null
zu, dass die Methode, die Sie würden, Holen Sie sich eine wunderbareNullPointerException
. Dieses Problem angegangen werden muss, indem sichergestellt wird, dass das Objekt, das Sie übergeben haben, ist nicht null.Schließlich, Ihr test konnten mit ein bisschen umzuschreiben. Sie wollen, um zu definieren mehreren Fällen:
null
an den Konstruktor)Während es gibt zu viele Fälle für mich, um hier aufzuzählen, kann Sie getestet werden,Hamcrest Matcher.
Anstatt zu versuchen, assertEquals, können Sie versuchen, assertTrue.
assertTrue ist speziell verwendet, um zu überprüfen Boolesche Werte.
Für Boolesche Tests in Junit, es wäre besser, verwenden assertTrue /assertFalse
Können Sie assertj fließend Behauptungen, die den job machen:
Mehr auf http://joel-costigliola.github.io/assertj/