Я хочу проверить код, который создает байтовые массивы, используемые для отправки в виде пакетов UDP.
Хотя я не могу воспроизвести каждый байт в моем тесте (например, случайные байты, метки времени), я бы хотел протестировать байты, которые я могу предопределить.
Возможно ли что-то вроде следующего с использованием JUnit 4.8 (и Mockito 1.8)?
Packet packet = new RandomPacket();
byte[] bytes = new byte[] {
0x00, 0x02, 0x05, 0x00, anyByte(), anyByte(), anyByte(), anyByte(), 0x00
};
assertArrayEquals(packet.getBytes(), bytes);
Пример выше, конечно, не работает, я просто ищу способ использовать какой-то подстановочный знак в assertArrayEquals()
.
PS: Моя единственная альтернатива прямо сейчас - проверять каждый байт отдельно (и опускать случайные). Но это тихо, утомительно и не очень многократно.
Благодаря ответу JB Nizet у меня теперь есть следующий код, работающий просто отлично:
private static int any() {
return -1;
}
private static void assertArrayEquals(int[] expected, byte[] actual) {
if(actual.length != expected.length) {
fail(String.format("Arrays differ in size: expected <%d> but was <%d>", expected.length, actual.length));
}
for(int i = 0; i < expected.length; i ++) {
if(expected[i] == -1) {
continue;
}
if((byte) expected[i] != actual[i]) {
fail(String.format("Arrays differ at element %d: expected <%d> but was <%d>", i, expected[i], actual[i]));
}
}
}