Junit4: BiMatcher рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдлрд╝рд░ре░ 2018  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: junit-team/junit4

рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ BiMatcher рдкрджрд╛рдиреБрдХреНрд░рдо ( org.hamcrest.Matcher рдХрд╛ рдПрдирд╛рд▓реЙрдЧ, рд▓реЗрдХрд┐рди 2 рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ) рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ Comparator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ BiPredicate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ JUnit рдХреЛ Java-8 рд╕реЗ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ AND/OR/NOT рд▓реЙрдЬрд┐рдХ рдЬреЛрдбрд╝ рджреЗрдЧрд╛)ред
рдЖрдЧреЗ рдХреЗ рд╕рднреА рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдиреЛрдЯреНрд╕:

  • BiMatcher , BiPredicate рдФрд░ Comparator рдирд╛рдореЛрдВ рдХрд╛ рдкрд░рд╕реНрдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рд╕рднреА рдХреЛрдб рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИред

Assert рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ:

  • assertThat(T expected, T actual, Comparator<T> biMatcher);
  • assertThat(String message, T expected, T actual, Comparator<T> biMatcher); (рд╢рд╛рдпрдж рдЬрд░реВрд░реА рдирд╣реАрдВ, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
  • рдПрдХрд╛рдзрд┐рдХ assertArray() рд╡рд┐рдзрд┐рдпрд╛рдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред

рдкреНрд░реЗрд░рдгрд╛: рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреИрдЪ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣реБрдд рд╕реА рд╕рдорд╛рди рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб (рд▓реВрдк рдФрд░ рд╢рд░реНрддреЛрдВ) рдХреЗ рд╕рд╛рдеред Comparator рдЗрд╕реЗ рдХрдо рдХреЛрдб рдФрд░ рдЙрдЪреНрдЪ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг (рдЬрд┐рд╕рд╕реЗ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛): рд╕рд░рдгреА рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рди рд╣реИ рдпрд╛ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ (рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред

рд╡рд░реНрддрдорд╛рди рдЬреБрдиреАрдЯ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
рдЫреЛрдЯрд╛:

for (int i = 0; i < elements.length - 1; i++) {
  if (checkSame) { // Same
    assertSame("elements must be the same.", elements[i], elements[i + 1]);
  } else { // Not same
    assertNotSame("elements must be not the same.", elements[i], elements[i + 1]);
  }
}

рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди (рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдкрд░рд╡рд╛рд╣ рдХреМрди рдХрд░рддрд╛ рд╣реИ):

if (checkSame) { // Same
  for (int i = 0; i < elements.length - 1; i++) {
    assertSame("elements must be the same.", elements[i], elements[i + 1]);
  }
else { // Not same
  for (int i = 0; i < elements.length - 1; i++) {
    assertNotSame("elements must be not the same.", elements[i], elements[i + 1]);
  }
}

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдЕрдкрдиреЗ Comparator рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ assertTrue()/assertFalse() , рд▓реЗрдХрд┐рди рддреБрд▓рдирд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рднреА рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ (рдЬрдм рддрдХ рдХрд┐ рд╣рдо рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ)ред

рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдФрд░ рд╕рд╛рдл рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреИрд╕реЗ:

Comparator<T> comparator = checkSame ? BiMatchers.same() : BiMatchers.notSame();
String message = checkSame ? "elements must be the same." : "elements must be not the same.";
for (int i = 0; i < elements.length - 1; i++) {
  assertThat(message, elements[i], elements[i + 1], comparator);
}

рдЗрд╕реЗ рдФрд░ рднреА рдЫреЛрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡реИрдХрд▓реНрдкрд┐рдХ message рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде Comparator рд╕реЗ MessagedComparator рддрдХ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬреБрдиреАрдЯ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдХрджрд░:

MessagedComparator<T> comparator = checkSame ? BiMatchers.same("elements must be the same.") : BiMatchers.notSame("elements must be not the same.");
for (int i = 0; i < elements.length - 1; i++) {
  assertThat(message, elements[i], elements[i + 1], comparator);
}

рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рджреВрд░рдЧрд╛рдореА рд╣реИрдВ:
1) Assert рд╡рд░реНрдЧ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рдорд╛рдирдХ рдпрд╛ рд╕реНрд╡рдпрдВ рдХреЗ рддреБрд▓рдирд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
2) рдкрд┐рдЫрд▓реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
3) рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЙрдЬрд┐рдХ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ (AND, OR, NOT) рдХреЛ рдЖрдЙрдЯ-рдСрдлрд╝-рдж-рдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( org.hamcrest.CoreMatchers рдЬреИрд╕рд╛ рдХреБрдЫ)ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд┐рд╕реА рднреА рдирдИ рдорд┐рдиреА-рдлреАрдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП assertNotSame() рдЖрдЧреЗ assertSame() рдЖрджрд┐ред рдпрд╛ рдлрд┐рд░ рд╣рдореЗрдВ assertTrue()/assertFalse() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
4) рдкреВрд░реЗ Assert рд╡рд░реНрдЧ рдХреЛ рдПрдХреАрдХреГрдд рд░реВрдк рдореЗрдВ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг:

public static void assertSame(String message, Object expected, Object actual) {
  assertThat(message, expected, actual, BiMatchers.same())
}

public static void assertThat(String message, T expected, T actual, Comparator<T> biMatcher) {
...
}

рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

public static void assertSame(String message, Object expected, Object actual) {
  assertThat(expected, actual, BiMatchers.same(message))
}

public static void assertThat(T expected, T actual, MessagedComparator<T> biMatcher) {
...
}

5) assertArray() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред рдЬреИрд╕реЗ:

public static void assertArrayEquals(boolean[] expecteds, boolean[] actuals) {
  assertArray(expecteds, actuals, BiMatchers.equals());
}

public static void assertArray(boolean[] expecteds, boolean[] actuals, Comparator<Boolean>) {
...
}

рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк 2 рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ:

Assert.assertArray(array1, array2, BiMatchers.same());

рд╕рд╛рде рд╣реА рд╕рд░рдгреА-рд▓рдВрдмрд╛рдИ рдпрд╛ рдЕрдиреНрдп рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЫрджреНрдо рдХреЛрдб:

Assert.assertArray(array1, array2, and(sameLength(), same()));

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬреБрдиреАрдЯ 4.x рдЕрдзрд┐рдХ рджрд╛рд╡рд╛ рдбреАрдПрд╕рдПрд▓ рди рдЬреЛрдбрд╝реЗрдВред рдбреАрдПрд╕рдПрд▓ рдХреЛ рд╕рд╣реА рдФрд░ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рдирд╛ рд╡рд╛рдХрдИ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреБрдиреАрдЯ рдореЗрдВ рдЙрд╕ рдкрд░ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдЦрд░реНрдЪ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рд╕рддреНрдп рдпрд╛ рдЙрддреНрд╕рд╡ рдЬреИрд╕реЗ рдЕрдЪреНрдЫреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рджрд╛рд╡реЗ рдврд╛рдВрдЪреЗ рд╣реЛрддреЗ рд╣реИрдВред

рд╕рд╛рде рд╣реА, рдЬрд╛рд╡рд╛ 8 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ http://github.com/junit-team/junit5 рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

@gitIvanB рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред @kcooney рдХреА рддрд░рд╣, рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрднрд┐рдХрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬреИрд╕реЗ AssertJ рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@kcooney , @marcphilipp , рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╛рд╡рд╛ libs рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрдиред рдХреНрдпрд╛ рдореИрдВ рдЕрдВрдЧреВрдареЗ рдХреЗ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ Assert рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╛ рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИ)? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ JUnit-4 рд╕реЗ JUnit-5 рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрдЧреНрд░реЗрдб рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред

@gitIvanB рдкреНрд░рд╢реНрди рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЬреВрдирд┐рдЯ 4 рдХреЗ рдЦрд┐рд▓рд╛рдл рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ org.junit.Assert рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЬреВрдирд┐рдЯ 5 рдХреЗ рдЦрд┐рд▓рд╛рдл рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ org.junit.jupiter.api.Assertions

рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ Assert. рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

@gitIvanB рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ junit.framework.Assert рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди org.junit.Assert рдареАрдХ рд╣реИред рдЬрдм рдЖрдк рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬреБрдиреАрдЯ 4 рдХреЛ рдЬреБрдиреАрдЯ рдЬреНрдпреВрдкрд┐рдЯрд░ рдЕрднрд┐рдХрдерди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреАрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдИрдбреАрдИрдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)ред рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рд▓реЗ рдЬреБрдиреАрдЯ 4 рдореЗрдВ рдЖрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдмреГрд╣рд╕реНрдкрддрд┐ рдореЗрдВ рдЕрдВрддрд┐рдо рд╣реЛрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЕрдм рдПрдХ рдЕрд▓рдЧ рдЕрднрд┐рдХрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдВрдЯреЗрдЬ рд╕реЗ рдЬреБрдкрд┐рдЯрд░ рдХреА рдУрд░ рдкрд▓рд╛рдпрди рдХрд░рддреЗ рд╕рдордп рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

@panchenko , @marcphilipp рддреЛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдордЭрд╛ рдХрд┐ org.junit.Assert рд╕реАрд▓ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирдП рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдореГрджреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЬреБрдиреАрдЯ -5 рдореЗрдВ рдореБрдЭреЗ рдпрд╛ рддреЛ org.junit.jupiter.api.Assertions ( org.junit.Assert рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ) рдпрд╛ рдХреБрдЫ рджрд╛рд╡рд╛ lib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЬреБрдиреАрдЯ -5 рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдирдЬрд╝рд░ рд╕реЗ org.junit.jupiter.api.Assertions рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг org.junit.Assert ред рддреЛ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЬреБрдиреАрдЯ -5 рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЯрд┐рдХрдЯ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ :) рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЬреБрдиреАрдЯ -5 рдХреЛ рдпрд╛ рддреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд╛рд╡рд╛ libs рдХреЛ рд╕реМрдВрдкрдирд╛ рдЪрд╛рд╣рд┐рдПред

@gitIvanB JUnit рдХрд╛ рджрд░реНрд╢рди рдЬрд╛рд╡рд╛ рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдПрдХ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╣рдо рдЕрдХреНрд╕рд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреНрдп рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░/рдпрд╛ рд░рд┐рдЪ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ JUnit рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрднрд┐рдХрдерди рдХреЗ рд▓рд┐рдП, рдРрд╕реА рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЕрднрд┐рдХрдерди рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рд╕рдореВрд╣ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рдХрднреА-рдХрднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реЛред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google рдЯреНрд░реБрде (https://github.com/google/truth), FEST (https://github.com/alexruiz/fest-assert-2.x), AssertJ (http://joel-) рд╣реИред costigliola.github.io/assertj/) рдФрд░ рд╣реИрдордХреНрд░реЗрд╕реНрдЯ (http://hamcrest.org/JavaHamcrest/)ред

рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрджреНрднреБрдд рдЕрднрд┐рдХрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдореИрдВ org.junit.Assert рд▓рд┐рдП рдирдП рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрдирд┐рдЪреНрдЫреБрдХ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдЗрд╕реЗ рдЬрдореЗ рд╣реБрдП рдирд╣реАрдВ рдорд╛рдиреВрдВрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ junit.framework.Assert рдЬрдореЗ рд╣реБрдП рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, 4.13 assertThrows рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореГрджреНрдз рджрд╛рд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореВрд▓ рдмрд╛рддреЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред

рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╣реЗрдВ рддреЛ, рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реАрдерд░реА рд╕рдореБрджрд╛рдпреЛрдВ рдХрд╛ рдЧрдарди рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЧрд▓реЗ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЬреБрдиреАрдЯ 5 рдХреЗ рд▓рд┐рдП рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ рдЕрдЧрд▓реА рдкреАрдврд╝реА рдХреЗ рдЬреБрдиреАрдЯ рдХреЛ рдЬреЛрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрдЪреНрдЫреА рдиреАрдВрд╡ рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ (рдпрд╛ рд╢рд╛рдпрдж рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд▓рдЧрд╛ рдХрд┐ рдирдпрд╛ рдврд╛рдВрдЪрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдерд╛ рдФрд░ рдкреЙрд▓рд┐рд╢ JUnit5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JUnit5 рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдерд╛)ред рдирдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рдерд╛рдУрдВ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдХреЗрдВрдЯ, рдПрд░рд┐рдЪ рдФрд░ рдбреЗрд╡рд┐рдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдЕрднрд┐рдХрдерди рдПрдкреАрдЖрдИ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЖрдк рд╢рд╛рдпрдж рдЬреБрдиреАрдЯ рдореЗрдВ рд╣реИрдордХреНрд░реЗрд╕реНрдЯ рдпрд╛ рдЯреНрд░реБрде рдЬреИрд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдбреАрдПрд╕рдПрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореГрджреНрдз рджрд╛рд╡реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрднреА рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред

рдореИрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JUnit5 рдЯреАрдо рдкрд░ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЪреНрдЫреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдиреАрдВрд╡ рд╡рд╣рд╛рдВ рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИред

рдЬрдм рд╣рдордиреЗ рдЬреБрдиреАрдЯ 5 (рдЙрд╕ рд╕рдордп "рдЬреБрдиреАрдЯ рд▓реИрдореНрдмреНрдбрд╛" рдХреЛрдбрдиреЗрдо) рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рд╣рдо рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдирдИ рддрд░рд╣ рдХреА рдЕрднрд┐рдХрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЬреБрдиреАрдЯ 5 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЗрд╕реЗ рд░рдЦрддреА рд╣реИ:

рднрд▓реЗ рд╣реА рдЬреБрдиреАрдЯ рдЬреНрдпреВрдкрд┐рдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЕрднрд┐рдХрдерди рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреИрд╕реЗ рдХрд┐ рдореИрдЪрд░реНрд╕ рд╡рд╛рдВрдЫрд┐рдд рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, JUnit рдЯреАрдо рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЕрднрд┐рдХрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ AssertJ, Hamcrest, рд╕рддреНрдп, рдЖрджрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрднрд┐рдХрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред

рддреЛ, рдпрд╣ рдпрд╛ рддреЛ рдЬрдореЗ рд╣реБрдП рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдХреНрд╖реНрдп рдЬреБрдиреАрдЯ 4 рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╛рд╡реЗ рдХрд╛ рдореВрд▓ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рднреА AssertJ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

terorontti picture terorontti  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sbrannen picture sbrannen  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

apreg picture apreg  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aleenadavy90 picture aleenadavy90  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sabi0 picture sabi0  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ