6.1 negesake

Asserts minangka pamriksa khusus sing bisa dilebokake ing macem-macem papan ing kode kasebut. Tugase yaiku kanggo nemtokake manawa ana sing salah. Utawa, kanggo mriksa manawa kabeh mlaku kaya sing dikarepake. Iki "kaya sing dibutuhake" lan ngidini sampeyan nyetel kanthi macem-macem cara.

Sampeyan wis nemoni sawetara pratelan ing kode ing ndhuwur. Sing pertama yaiku mriksa obyek kanggo kesetaraan. Yen obyek ora padha, pangecualian bakal dibuwang lan tes bakal gagal.

Urutan perbandingan penting ing kene , amarga JUnit ing laporan pungkasan bakal nulis kaya "nilai 1 sing ditampa, nanging 3 samesthine". Format umum kanggo mriksa kasebut yaiku:

assertEquals(standard , meaning)

Tuladha:

@Test
public void whenAssertingEquality () {
    String expected = "3.1415";
    String actual = "3";

    assertEquals(expected, actual);
}

6.2 Metode assertEquals, assertTrue, assertFalse

Ing ngisor iki aku bakal dhaptar cara sing paling populer - pratelan. Miturut jeneng iku cukup bisa kanggo guess carane padha bisa. Nanging aku bakal nulis panjelasan singkat:

assertEquals Priksa manawa rong obyek padha
assertArrayEquals Priksa yen rong larik ngemot nilai sing padha
negesake OraNull Priksa manawa argumen kasebut ora null
negesakeNull Priksa manawa argumen kasebut null
negesake OraSame Priksa manawa rong argumen kasebut dudu obyek sing padha
negesakeSame Priksa manawa rong argumen kasebut minangka obyek sing padha
negesake Bener Priksa manawa argumen kasebut bener
negesake Palsu Priksa manawa argumen kasebut salah

Sawetara cara iki katon keluwih. Napa nggunakake assertSame(a, b) nalika sampeyan mung bisa nulis assertTrue(a == b) ?

Intine yaiku negesake minangka cara sing cerdas. Iki nindakake akeh perkara sing migunani, kalebu nulis informasi kesalahan menyang log . Ing kasus sing sepisanan, bakal nulis yen obyek A wis samesthine, nanging obyek B ditampa .

Yen sampeyan duwe atusan tes, utamane sing mlaku ing server tes khusus, duwe log sing rinci bisa migunani banget. Aku mikir sampeyan ngerti maksudku.

Contoh perbandingan array:

@Test
public void whenAssertingArraysEquality() {
    char[] expected = {'J','u','n','i','t'};
    char[] actual = "Junit".toCharArray();

    assertArrayEquals(expected, actual);
}

6.3 Metode AssertAll

Kaya kasebut ing ndhuwur, cara negesake ora mung mriksa, nanging uga nulis akeh informasi babagan obyek sing bisa dibandhingake karo log.

Ayo nggawe perbandingan:

Address address = unitUnderTest.methodUnderTest();
assertEquals("Washington", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());

Nanging yen salah siji paramèter ora cocog, liyane ora bakal dicenthang. Nanging aku pengin tetep kedadeyan lan asile dicathet ing log. Nanging ing wektu sing padha, yen paling ora siji mriksa gagal, banjur tes isih gagal.

Ana cara khusus kanggo iki - assertAll () . Minangka argumen pisanan, perlu komentar kanggo ditulis ing log, lan banjur sawetara fungsi negesake.

Mangkene carane conto kita bakal ditulis maneh:

Address address = unitUnderTest.methodUnderTest();
assertAll("Complex address comparison script",
    () -> assertEquals("Washington", address.getCity()),
    () -> assertEquals("Oracle Parkway", address.getStreet()),
    () -> assertEquals("500", address.getNumber())
);

Banjur yen alamat ora bener, kaya iki bakal ditulis ing log:

	Complex scenario comparison address (3 failures)
	expected: <Washington> but was: <Seattle>
    expected: <Oracle Parkway> but was: <Main Street>
    expected: <500> but was: <5772>

6.4 metode assertTimeout

Elingi anotasi @Timeout ? Diijini kanggo ngontrol wektu eksekusi kabeh metode. Nanging kadhangkala migunani kanggo nyetel watesan ing eksekusi sawetara bagean kode ing metode kasebut. Sampeyan bisa nggunakake assertTimeout () kanggo iki .

Wektu liwati minangka parameter pisanan, lan kode (fungsi) sing kudu dileksanakake ing wektu tartamtu liwati minangka kaloro. Tuladha:

@Test
public void whenAssertingTimeout() {
    assertTimeout(
  	ofSeconds(2),
  	() -> {
    	// pause for one second
    	Thread.sleep(1000);
  	}
	);
}

Kelas Assert nduweni 12 varian saka metode assertTimeout () . Yen sampeyan pengin sinau luwih lengkap babagan dheweke, welcome menyang dokumentasi resmi .

6.5 Metode assertThrows

Kerep banget ana kahanan nalika sampeyan kudu nggawe manawa ing kahanan tartamtu kode mbuwang istiméwa tengen: ndeteksi kesalahan lan mbalang istiméwa tengen. Iki minangka kahanan sing umum banget.

Ing kasus iki, ana cara ngeset liyane migunani - iki assertThrows () . Format umum panggilan kasebut yaiku:

assertThrows(exception , code)

Sejatine, iku banget padha karo cara assertTimeout () , mung mriksa sing kode kasebut mbalang istiméwa tengen. Tuladha:

@Test
void whenAssertingException() {
    Throwable exception = assertThrows(
  	IllegalArgumentException.class,
  	() -> {
      	throw new IllegalArgumentException("Exception message");
  	}
    );
    assertEquals("Exception message", exception.getMessage());
}