Assert not equals in java

Примеры утверждений JUnit 5

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Утверждения (Assertions) JUnit 5 помогают сравнить ожидаемый результат с фактическим результатом теста. Для простоты все утверждения JUnit Jupiter являются статическими методами в классе org.junit.jupiter.Assertions.

Не успешные утверждения будет генерировать исключение AssertionFailedError или его подкласс.

  1. assertEquals() и assertNotEquals()
  2. assertArrayEquals()
  3. assertIterableEquals()
  4. assertLinesMatch()
  5. assertNotNull() и assertNull()
  6. assertNotSame() и assertSame()
  7. assertTimeout() и assertTimeoutPreemptively()
  8. assertTrue() и assertFalse)
  9. assertThrows()
  10. Пример fail()

1. assertEquals() и assertNotEquals()

Метод Assertions.assertEquals() используется для подтверждения того, что ожидаемое и фактическое значения равны. Метод assertEquals() ммеет много перегруженных методов для разных типов данных, например, int, short, float, char и т. д. Он также выдает сообщения об ошибках, которые будут напечатаны в случае если тест будет неуспешным. например

Перегруженные методы

public static void assertEquals(int expected, int actual) public static void assertEquals(int expected, int actual, String message) public static void assertEquals(int expected, int actual, Supplier
void test() < //Тест пройдёт Assertions.assertEquals(4, Calculator.add(2, 2)); //Тест не пройдёт Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Тест не пройдёт SuppliermessageSupplier = () -> "Calculator.add(2, 2) test failed"; Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier); >

Точно так же метод Assertions.assertNotEquals() используется для утверждения, что ожидаемое и фактическое значения НЕ равны. В отличие от метода assertEquals() , assertNotEquals() не содержит перегруженных методов для разных типов данных, а только параметр типа Object принимается.

Перегруженные методы

public static void assertNotEquals(Object expected, Object actual) public static void assertNotEquals(Object expected, Object actual, String message) public static void assertNotEquals(Object expected, Object actual, Supplier messageSupplier)
void test() < //Тест пройдёт Assertions.assertNotEquals(3, Calculator.add(2, 2)); //Тест не пройдёт Assertions.assertNotEquals(4, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Тест не пройдёт SuppliermessageSupplier = () -> "Calculator.add(2, 2) test failed"; Assertions.assertNotEquals(4, Calculator.add(2, 2), messageSupplier); >

2. assertArrayEquals()

Метод assertArrayEquals() утверждает, что ожидаемый и фактический массивы равны.

Он также имеет перегруженные методы для различных типов данных, например, boolean[], char[], int[] и т. д. Он также выдает сообщения об ошибках, которые будут напечатаны в случае сбоя теста. например

Перегруженные методы

public static void assertArrayEquals(int[] expected, int[] actual) public static void assertArrayEquals(int[] expected, int[] actual, String message) public static void assertArrayEquals(int[] expected, int[] actual, Supplier messageSupplier)
void testCase() < //Тест пройдёт Assertions.assertArrayEquals(new int[], new int[], "Array Equal Test"); //Тест не пройден, потому что порядок элементов отличается Assertions.assertArrayEquals(new int[], new int[], "Array Equal Test"); //Тест не пройден, потому что количество элементов другое Assertions.assertArrayEquals(new int[], new int[], "Array Equal Test"); >

3. assertIterableEquals()

Метод assertIterableEquals() утверждает,, что ожидаемые и фактические итерации полностью равны. «Глубокое равенство» означает, что количество и порядок элементов в коллекции должны быть одинаковыми, а повторяющиеся элементы должны быть одинаковыми.

У него также есть три перегруженных метода.

Перегруженные методы

public static void assertIterableEquals(Iterable expected, Iterable> actual) public static void assertIterableEquals(Iterable expected, Iterable> actual, String message) public static void assertIterableEquals(Iterable expected, Iterable> actual, Supplier messageSupplier)
@Test void testCase() < IterablelistOne = new ArrayList<>(Arrays.asList(1,2,3,4)); Iterable listTwo = new ArrayList<>(Arrays.asList(1,2,3,4)); Iterable listThree = new ArrayList<>(Arrays.asList(1,2,3)); Iterable listFour = new ArrayList<>(Arrays.asList(1,2,4,3)); //Тест пройдёт Assertions.assertIterableEquals(listOne, listTwo); //Тест не пройдёт Assertions.assertIterableEquals(listOne, listThree); //Тест не пройдёт Assertions.assertIterableEquals(listOne, listFour); >

4. assertLinesMatch()

Он утверждает, что ожидаемый список строк соответствует фактическому списку. Логика сопоставления строки с другой строкой:

  1. проверьте, если expected.equals(actual) - если да, переходите к следующей паре
  2. в противном случае рассматривать expected как регулярное выражение и проверять переход String.matches(String) - если да, переходить к следующей паре
  3. в противном случае проверьте, является ли expected строка маркером быстрой перемотки вперед, если да, примените соответствующие строки быстрой перемотки вперед и перейдите к 1.

Допустимый маркер быстрой перемотки вперед - это строка, которая начинается и заканчивается >> и содержит не менее четырех символов. Любой символ между литералами быстрой перемотки вперед отбрасывается.

>>>> >> stacktrace >> >> single line, non Integer.parse()-able comment >>

5. assertNotNull() и assertNull()

AssertNotNull() утверждает, что фактическое значение НЕ равно нулю. Точно так же метод assertNull() утверждает, что это действительно так null . У обоих есть три перегруженных метода.

Перегруженные методы

public static void assertNotNull(Object actual) public static void assertNotNull(Object actual, String message) public static void assertNotNull(Object actual, Supplier messageSupplier) public static void assertEquals(Object actual) public static void assertEquals(Object actual, String message) public static void assertEquals(Object actual, Supplier messageSupplier)

6. assertNotSame() и assertSame()

assertNotSame() утверждает, что ожидаемый и фактический не относятся к одному объекту. Точно так же метод assertSame() утверждает, что ожидаемый и фактический относятся к одному и тому же объекту.

У обоих есть три перегруженных метода.

Перегруженные методы

public static void assertNotSame(Object expected, Object actual) public static void assertNotSame(Object expected, Object actual, String message) public static void assertNotSame(Object expected, Object actual, Supplier<> messageSupplier) public static void assertSame(Object expected, Object actual) public static void assertSame(Object expected, Object actual, String message) public static void assertSame(Object expected, Object actual, Supplier messageSupplier)

7. assertTimeout() и assertTimeoutPreemptively()

Методы assertTimeout() и assertTimeoutPreemptively() используются для тестирования долго выполняющихся задач. Если заданная задача в тесте занимает больше указанной продолжительности, тест завершится неудачно.

Единственная разница между обоими методами заключается в том, что в assertTimeoutPreemptively() выполнение Executable или ThrowingSupplier будет прервано с упреждением при превышении тайм-аута. В случае assertTimeout() , Executable или ThrowingSupplier не будет прервана.

Перегруженные методы

public static void assertTimeout(Duration timeout, Executable executable) public static void assertTimeout(Duration timeout, Executable executable, String message) public static void assertTimeout(Duration timeout, Executable executable, Supplier messageSupplier) public static void assertTimeout(Duration timeout, ThrowingSupplier supplier, String message) public static void assertTimeout(Duration timeout, ThrowingSupplier supplier, Supplier messageSupplier)
@Test void testCase() < //This will pass Assertions.assertTimeout(Duration.ofMinutes(1), () ->< return "result"; >); //This will fail Assertions.assertTimeout(Duration.ofMillis(100), () -> < Thread.sleep(200); return "result"; >); //This will fail Assertions.assertTimeoutPreemptively(Duration.ofMillis(100), () -> < Thread.sleep(200); return "result"; >); >

8. assertTrue() и assertFalse()

Метод assertTrue() утверждает, что предоставленное условие истинно или предоставленное логическое условие BooleanSupplier истинно.

Точно так же assertFalse() утверждает, что предоставленное условие ложно.

У обоих есть следующие перегруженные методы:

Перегруженные методы

public static void assertTrue(boolean condition) public static void assertTrue(boolean condition, String message) public static void assertTrue(boolean condition, Supplier messageSupplier) public static void assertTrue(BooleanSupplier booleanSupplier) public static void assertTrue(BooleanSupplier booleanSupplier, String message) public static void assertTrue(BooleanSupplier booleanSupplier, Supplier messageSupplier) public static void assertFalse(boolean condition) public static void assertFalse(boolean condition, String message) public static void assertFalse(boolean condition, Supplier messageSupplier) public static void assertFalse(BooleanSupplier booleanSupplier) public static void assertFalse(BooleanSupplier booleanSupplier, String message) public static void assertFalse(BooleanSupplier booleanSupplier, Supplier messageSupplier)
@Test void testCase() < boolean trueBool = true; boolean falseBool = false; Assertions.assertTrue(trueBool); Assertions.assertTrue(falseBool, "test execution message"); Assertions.assertTrue(falseBool, AppTest::message); Assertions.assertTrue(AppTest::getResult, AppTest::message); Assertions.assertFalse(falseBool); Assertions.assertFalse(trueBool, "test execution message"); Assertions.assertFalse(trueBool, AppTest::message); Assertions.assertFalse(AppTest::getResult, AppTest::message); >private static String message () < return "Test execution result"; >private static boolean getResult ()

9. assertThrows()

assetThrows() утверждает, что исполнение подаваемы Executable генерирует исключение из expectedType и возвращает исключение.

Перегруженные методы

public static T assertThrows(Class expectedType, Executable executable)

10. Пример fail()

Метод fail() делает тест неуспешным. Он имеет следующие перегруженные методы:

Перегруженные методы

public static void fail(String message) public static void fail(Throwable cause) public static void fail(String message, Throwable cause) public static void fail(Supplier messageSupplier)
public class AppTest < @Test void testCase() < Assertions.fail("not found good reason to pass"); Assertions.fail(AppTest::message); >private static String message () < return "not found good reason to pass"; >>

Источник

junit arrays not equal test

I'm trying to write a test case where my scenario is that two byte arrays should be not equal. Can I do this with junit? Or do I have to use something external like Hamcrest? I couldn't change the code in this answer to do the job Please give a sample.

6 Answers 6

assertFalse(Arrays.equals(array1, array2)); 

If you wanted to check they were equal, I would use the following instead.

assertEquals(Arrays.toString(array1), Arrays.toString(array2)); 

as this produces a readable output as to what was different rather than just failing.

I prefer doing this the Hamcrest way, which is more expressive:

Assert.assertThat(array1, IsNot.not(IsEqual.equalTo(array2))); 

Or the short version with static imports:

assertThat(array1, not(equalTo(array2))); 

(The IsEqual matcher is smart enough to understand arrays, fortunately.)

Note that a limited version of Hamcrest is part of the JUnit 4.x distribution, so you don't need to add an external library.

The short version does appear more readable. I tend to be more performance mad. I assume that IsEquals has special handling for arrays and doesn't use equals()

Newer versions of JUnit offer org.junit.Assert.assertArrayEquals(byte[], byte[]) , with overloads for other array types. Failures show the first index with a non-match and the differing elements at that index.

I also enjoy assertEquals(Arrays.asList(expected), Arrays.asList(actual)) . The Hamcrest-powered rendition mentioned above is probably best.

The question was to test array NOT equals, right? What about this case without using Hamcrest? Is there a way to do it?

Here is a possible alternative, which has the advantage of using the same code as assertArrayEquals() :

private void assertArrayNotEquals(byte[] expecteds, byte[] actuals) < try < assertArrayEquals(expecteds, actuals); >catch (AssertionError e) < return; >fail("The arrays are equal"); > 

It's a nice idea, but this answer doesn't compile as-is, and if it's usable, it's not obvious how. Catching and ignoring an AssertionError from the try-catch (to treat it as success) will also catch the assertion error from fail , treating it as success too. Suggest updating the code or deleting this answer.

Sorry this is a bit long but it's easy to debug with and you can cut and paste it into your unit test.

private int span = 10; private boolean equal(byte[] expected, byte[] got) < final boolean result; String message = null; int offset = -1; int length = -1; if(expected == null && got == null) < result = true; >else if(expected == null || got == null) < message = "One array is null: " + (expected == null ? "expected" : "got"); result = false; >else if(expected.length != got.length) < message = "Lengths differ: expected = " + expected.length + ", got = " + got.length; result = false; >else < length = expected.length; for(int i = 0; i < length; i++) < if(expected[i] != got[i]) < offset = i; break; >> result = offset == -1; if(!result) < message = "Contents differ"; >> if(!result) < System.err.println(message); if(offset >= 0) < hexDump("Expected: ", expected, offset, length); hexDump(" Got: ", got, offset, length); >> return result; > private void hexDump(String label, byte[] ba, int offset, int length) < System.err.print(label); if(ba == null) < System.err.println(""); > else if(ba.length == 0) < System.err.println(""); > else < // bytes either side final int from = Math.max(0, offset - span); final int to = Math.min(length, offset + span); if(from != 0) < System.err.print("(offset:" + from + ") "); >for(int i = from; i < to; i++) < System.err.printf("%02X ", new Byte(ba[i])); >System.err.println(); > > @Test public void testExample() < assertTrue(equal(new byte[] < 1, 2, 3 >, new byte[] < 1, 8, 3 >)); > 

Источник

How can I express that two values are not equal to eachother?

Is there a method similar to equals() that expresses "not equal to"? An example of what I am trying to accomplish is below:

if (secondaryPassword.equals(initialPassword)) < JOptionPane.showMessageDialog(null, "You've successfully completed the program."); >else

I don't get how using something like !string.equals(..) (which is the method 'notEquals') will help you not use a OR.

4 Answers 4

"Not equals" can be expressed with the "not" operator ! and the standard .equals .

if (a.equals(b)) // a equals b if (!a.equals(b)) // a not equal to b 

Just put a '!' in front of the boolean expression

if (!secondaryPassword.equals(initialPassword)) 

If the class implements comparable, you could also do

int compRes = a.compareTo(b); if(compRes < 0 || compRes >0) System.out.println("not equal"); else System.out.println("equal); 

doesn't use a ! , though not particularly useful, or readable.

Linked

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.25.43544

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Читайте также:  Phpmyadmin php parse error syntax error unexpected in
Оцените статью