2016-12-11 20 views
2

Я написал простой алгоритм, который преобразует двоичное число в формате String в массив байтов. Я использую int для вычисления численного значения для 8 бит, а затем отбрасывает его в байт.Ошибка JUnit при покании байта?

Проблема возникает, когда я запускаю следующий код в JUnit:

assertEquals(new byte[] {(byte) 0} , Set1.binToBytes("00000000")); 

Так строка с 8 нулями должно привести к 0 байт. Он заканчивается AssertionError. При трассировке переменных во время отладки, я нашел следующее:

Ожидаемое: [0] Фактический: [0]

Является ли это ошибка в JUnit, или я что-то напутал? Являются ли эти два выше в разных типах?

После запуска теста JUnit все, я обнаружил следующую ошибку:

java.lang.AssertionError: expected:<[[email protected]> but was:<[[email protected]> 
+0

Equals (и assertEquals) не проверяют равенство массива: 'arr1.equals (arr2)' будет только true, если 'arr1 == arr2'. – user2864740

ответ

3

Массивы не переопределить метод equals. Вы не должны использовать assertEquals для сравнения массивов. Вместо этого, вы должны использовать assertArrayEquals:

assertArrayEquals(new byte[] {(byte) 0} , Set1.binToBytes("00000000")); 
+1

То есть я не должен использовать assertEquals. – GregT

+0

@ пользователь1257384 grr, да, конечно. Глупые опечатки. – Mureinik

1

Другой вариант: просто обратиться к один утверждают один действительно нуждается: assertThat

Это утверждают работает с Hamcrest matchers; так что вы можете записать код как:

assertThat(actual, is(expected)) 

И славная вещь ... до тех пор, пока actual и expected имеют соответствующие типы (простые объекты, массивы, коллекции, вы-имя-это) ... вышеизложенное код будет делать то, что вы думаете, что он должен делать.

И это дает вам хорошее сообщение об ошибке, содержащее оба массива в случае, если они не совпадают!

Как только вы привыкнете к нему; вы обнаружите, что больше не нужно использовать какие-либо другие варианты утверждения.