### Question:
DefaultBootProcessChain implements BootProcessChain { @Override public BootProcessChain addFirst(BootJob bootJob) { BootJobContext newJob = newBootJobContext(bootJob); header.getNext().setPrev(newJob); newJob.setNext(header.getNext()); header.setNext(newJob); newJob.setPrev(header); return this; } DefaultBootProcessChain(); @Override void start(); @Override void stop(); @Override BootProcessChain addLast(BootJob bootJob); @Override BootProcessChain addFirst(BootJob bootJob);  }### Answer:
@DisplayName("test_addFirst") @Test void testAddFirst() { BootProcessChain processChain = new DefaultBootProcessChain(); final List<Integer> list = new ArrayList<>(2); for (int i = 0; i < 2; i++) { final Integer tmp = i; processChain.addFirst(new BootJob() { @Override public void start() { list.add(tmp); } }); } processChain.start(); assertEquals(Integer.valueOf(1), list.get(0)); assertEquals(Integer.valueOf(0), list.get(1)); }