CodeGym/Java Course/рдореЙрдбреНрдпреВрд▓ 3/JUnit рдкреНрд░рддрд┐рдкрд╛рджрди

JUnit рдкреНрд░рддрд┐рдкрд╛рджрди

рдЙрдкрд▓рдмреНрдз

6.1 рдкреНрд░рддрд┐рдкрд╛рджрди

рджрд╛рд╡рд╛ рд╣реЗ рд╡рд┐рд╢реЗрд╖ рддрдкрд╛рд╕рдгреНрдпрд╛ рдЖрд╣реЗрдд рдЬреЗ рдХреЛрдбрдордзреНрдпреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдард┐рдХрд╛рдгреА рдШрд╛рддрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдХрд╛рд╣реАрддрд░реА рдЪреВрдХ рдЭрд╛рд▓реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреЗ рд╣реЗ рддреНрдпрд╛рдВрдЪреЗ рдХрд╛рд░реНрдп рдЖрд╣реЗ. рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдРрд╡рдЬреА, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЬрд╕реЗ рдкрд╛рд╣рд┐рдЬреЗ рддрд╕реЗ рдЪрд╛рд▓реВ рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА. рд╣реЗ "рдЖрд╡рд╢реНрдпрдХрддреЗрдиреБрд╕рд╛рд░" рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд.

рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд░реАрд▓ рдХреЛрдбрдордзреНрдпреЗ рдХрд╛рд╣реА рдкреНрд░рддрд┐рдкрд╛рджрдиреЗ рдЖрдзреАрдЪ рдЖрд▓реА рдЖрд╣реЗрдд. рдкреНрд░рдердо рд╕рдорд╛рдирддреЗрд╕рд╛рдареА рд╡рд╕реНрддреВ рддрдкрд╛рд╕рдд рдЖрд╣реЗ. рдЬрд░ рд╡рд╕реНрддреВ рд╕рдорд╛рди рдирд╕рддреАрд▓, рддрд░ рдЕрдкрд╡рд╛рдж рдЯрд╛рдХрд▓рд╛ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдИрд▓.

рддреБрд▓рдиреЗрдЪрд╛ рдХреНрд░рдо рдпреЗрдереЗ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдЖрд╣реЗ , рдХрд╛рд░рдг рдЕрдВрддрд┐рдо рдЕрд╣рд╡рд╛рд▓рд╛рдд JUnit "рдореВрд▓реНрдп 1 рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ, рдкрд░рдВрддреБ 3 рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрддреЗ" рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рд▓рд┐рд╣реАрд▓. рдЕрд╢рд╛ рддрдкрд╛рд╕рдгреАрдЪреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рд░реВрдк рдЖрд╣реЗ:

assertEquals(standard , meaning)

рдЙрджрд╛рд╣рд░рдг:

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

    assertEquals(expected, actual);
}

6.2 рдкрджреНрдзрддреА assertEquals, assertTrue, assertFalse

рдЦрд╛рд▓реА рдореА рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рдкрджреНрдзрддреАрдВрдЪреА рдпрд╛рджреА рдХрд░реЗрди - рдкреНрд░рддрд┐рдкрд╛рджрди. рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░реВрди рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рдпрд╛рдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рдкрдг рддрд░реАрд╣реА рдореА рдПрдХ рд▓рд╣рд╛рди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд▓рд┐рд╣реАрди:

assertEquals рджреЛрди рд╡рд╕реНрддреВ рд╕рдорд╛рди рдЖрд╣реЗрдд рд╣реЗ рддрдкрд╛рд╕рддреЗ
assertArrayEquals рджреЛрди рдЕреЕрд░реЗрдордзреНрдпреЗ рд╕рдорд╛рди рдореВрд▓реНрдпреЗ рдЖрд╣реЗрдд рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЗ
assertNotNull рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╢реВрдиреНрдп рдирд╛рд╣реА рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЗ
assertNull рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╢реВрдиреНрдп рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЗ
assertNotSame рджреЛрди рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рд╣реАрдд рд╣реЗ рддрдкрд╛рд╕рд╛
assertSame рджреЛрди рд╡рд┐рддрд░реНрдХ рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╣реЗрдд рд╣реЗ рддрдкрд╛рд╕рд╛
рдЦрд░реЗ рдЖрд╣реЗ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдЦрд░рд╛ рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЛ
рдЕрд╕рддреНрдп рджрд╛рд╡рд╛ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдЦреЛрдЯрд╛ рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЗ

рдпрд╛рдкреИрдХреА рдХрд╛рд╣реА рдкрджреНрдзрддреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд╛рдЯрддрд╛рдд. рддреБрдореНрд╣реА assertTrue(a == b) рд▓рд┐рд╣реВ рд╢рдХрддрд╛ рддреЗрд╡реНрд╣рд╛ assertSame(a, b) рдХрд╛ рд╡рд╛рдкрд░рд╛ ?

рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рджрд╛рд╡рд╛ рдХрд░рдгреЗ рд╣реА рдПрдХ рдЕрддрд┐рд╢рдп рд╕реНрдорд╛рд░реНрдЯ рдкрджреНрдзрдд рдЖрд╣реЗ. рд╣реЗ рд▓реЙрдЧрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдорд╛рд╣рд┐рддреА рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╣ рдЕрдиреЗрдХ рдЙрдкрдпреБрдХреНрдд рдЧреЛрд╖реНрдЯреА рдХрд░рддреЗ . рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рддреЗ рд▓рд┐рд╣реЗрд▓ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ A рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрддрд╛, рдкрд░рдВрддреБ рдСрдмреНрдЬреЗрдХреНрдЯ B рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛. рджреБрд╕-рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рддреЗ рдлрдХреНрдд рд╕рддреНрдп рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрддреЗ рдЕрд╕реЗ рд▓рд┐рд╣реЗрд▓ .

рдЬреЗрд╡реНрд╣рд╛ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рд╢реЗрдХрдбреЛ рдЪрд╛рдЪрдгреНрдпрд╛ рдЕрд╕рддрд╛рдд, рд╡рд┐рд╢реЗрд╖рдд: рддреНрдпрд╛ рд╕рдорд░реНрдкрд┐рдд рдЪрд╛рдЪрдгреА рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЪрд╛рд▓рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдиреЛрдВрджреА рдЕрд╕рдгреЗ рдЦреВрдк рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ. рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдорд▓рд╛ рдХрд╛рдп рдореНрд╣рдгрд╛рдпрдЪреЗ рдЖрд╣реЗ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдордЬрд▓реЗ рдЖрд╣реЗ.

рдЕреЕрд░реЗ рддреБрд▓рдирд╛ рдЙрджрд╛рд╣рд░рдг:

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

    assertArrayEquals(expected, actual);
}

6.3 assertAll рдкрджреНрдзрдд

рд╡рд░ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рджрд╛рд╡рд╛ рдкрджреНрдзрдд рдХреЗрд╡рд│ рддрдкрд╛рд╕рдгреАрдЪ рдХрд░рдд рдирд╛рд╣реА рддрд░ рд▓реЙрдЧрд╢реА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рд╡рд╕реНрддреВрдВрдмрджреНрджрд▓ рдмрд░реАрдЪ рдорд╛рд╣рд┐рддреА рджреЗрдЦреАрд▓ рд▓рд┐рд╣рд┐рддреЗ.

рдЪрд▓рд╛ рдПрдХ рддреБрд▓рдирд╛ рдХрд░реВрдпрд╛:

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

рдкрдг рдЬрд░ рдПрдХ рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреБрд│рдд рдирд╕реЗрд▓ рддрд░ рдмрд╛рдХреАрдЪреЗ рддрдкрд╛рд╕рд▓реЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реАрдд. рдкрд░рдВрддреБ рддреЗ рдЕрдЬреВрдирд╣реА рдШрдбрд╛рд╡реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдкрд░рд┐рдгрд╛рдо рд▓реЙрдЧрдордзреНрдпреЗ рдиреЛрдВрджрд╡рд▓реЗ рдЬрд╛рд╡реЗрдд рдЕрд╢реА рдорд╛рдЭреА рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ. рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдЬрд░ рдХрд┐рдорд╛рди рдПрдХ рдЪреЗрдХ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓рд╛, рддрд░реАрд╣реА рдЪрд╛рдЪрдгреА рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реА.

рдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрджреНрдзрдд рдЖрд╣реЗ - assertAll() . рдкреНрд░рдердо рдпреБрдХреНрддрд┐рд╡рд╛рдж рдореНрд╣рдгреВрди, рд▓реЙрдЧрд╡рд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд▓рд╛рдЧрддреЗ рдЖрдгрд┐ рдирдВрддрд░ рдХрд┐рддреАрд╣реА assert рдлрдВрдХреНрд╢рдиреНрд╕.

рдЖрдордЪреЗ рдЙрджрд╛рд╣рд░рдг рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдХрд╕реЗ рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рдИрд▓ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ:

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

рдордЧ рдкрддреНрддрд╛ рдЪреБрдХреАрдЪрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рд▓реЙрдЧрд╡рд░ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рдИрд▓:

	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 assertTimeout рдкрджреНрдзрдд

@Timeout рднрд╛рд╖реНрдп рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ ? рдпрд╛рдиреЗ рд╕рдВрдкреВрд░реНрдг рдкрджреНрдзрддреАрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА. рдкрд░рдВрддреБ рдХрдзреАрдХрдзреА рдкрджреНрдзрддреАрдордзреНрдпреЗ рдХреЛрдбрдЪреНрдпрд╛ рдХрд╛рд╣реА рднрд╛рдЧрд╛рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╡рд░ рдирд┐рд░реНрдмрдВрдз рд╕реЗрдЯ рдХрд░рдгреЗ рдЙрдкрдпреБрдХреНрдд рдард░рддреЗ. рддреБрдореНрд╣реА рдпрд╛рд╕рд╛рдареА assertTimeout() рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ .

рдкреНрд░рдердо рдкреЕрд░рд╛рдореАрдЯрд░ рдореНрд╣рдгреВрди рд╡реЗрд│ рдкрд╛рд╕ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реЗрд│реЗрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓рд╛ рдХреЛрдб (рдлрдВрдХреНрд╢рди) рджреБрд╕рд░рд╛ рдореНрд╣рдгреВрди рдкрд╛рд╕ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЙрджрд╛рд╣рд░рдг:

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

Assert рдХреНрд▓рд╛рд╕рдордзреНрдпреЗ assertTimeout() рдкрджреНрдзрддреАрдЪреЗ 12 рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗрдд . рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╕реНрд╡рд╛рдЧрдд рдЖрд╣реЗ .

6.5 assertThrows рдкрджреНрдзрдд

рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдЕрд╢реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдЕрд╕рддреЗ рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдХреЛрдб рдпреЛрдЧреНрдп рдЕрдкрд╡рд╛рдж рдлреЗрдХрддреЛ: рддреЛ рддреНрд░реБрдЯреА рд╢реЛрдзрддреЛ рдЖрдгрд┐ рдпреЛрдЧреНрдп рдЕрдкрд╡рд╛рдж рдлреЗрдХрддреЛ. рд╣реА рдПрдХ рдЕрддрд┐рд╢рдп рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрд╣реЗ.

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдгрдЦреА рдПрдХ рдЙрдкрдпреБрдХреНрдд рджрд╛рд╡рд╛ рдкрджреНрдзрдд рдЖрд╣реЗ - рддреА assertThrows() рдЖрд╣реЗ . рддреНрдпрд╛рдЪреНрдпрд╛ рдХреЙрд▓рдЪреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рд░реВрдк рдЖрд╣реЗ:

assertThrows(exception , code)

рдореВрд▓рднреВрддрдкрдгреЗ, рд╣реЗ assertTimeout() рдкрджреНрдзрддреАрд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ , рдлрдХреНрдд рддреЗ рддрдкрд╛рд╕рддреЗ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рдпреЛрдЧреНрдп рдЕрдкрд╡рд╛рдж рдЯрд╛рдХрддреЛ. рдЙрджрд╛рд╣рд░рдг:

@Test
void whenAssertingException() {
    Throwable exception = assertThrows(
  	IllegalArgumentException.class,
  	() -> {
      	throw new IllegalArgumentException("Exception message");
  	}
    );
    assertEquals("Exception message", exception.getMessage());
}
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд