### Question:
ItemGroup extends AbstractItemHierarchy implements ItemInflater.ItemParent, ItemHierarchy.Observer { @Override public ItemHierarchy findItemById(int id) { if (id == getId()) { return this; } for (ItemHierarchy child : children) { ItemHierarchy childFindItem = child.findItemById(id); if (childFindItem != null) { return childFindItem; } } return null; } ItemGroup();  ItemGroup(Context context, AttributeSet attrs); @Override void addChild(ItemHierarchy child); boolean removeChild(ItemHierarchy child); void clear(); @Override int getCount(); @Override IItem getItemAt(int position); @Override void onChanged(ItemHierarchy hierarchy); @Override void onItemRangeChanged(ItemHierarchy itemHierarchy, int positionStart, int itemCount); @Override void onItemRangeInserted(ItemHierarchy itemHierarchy, int positionStart, int itemCount); @Override void onItemRangeMoved(
      ItemHierarchy itemHierarchy, int fromPosition, int toPosition, int itemCount); @Override void onItemRangeRemoved(ItemHierarchy itemHierarchy, int positionStart, int itemCount); @Override ItemHierarchy findItemById(int id);  }### Answer:
@Test public void testFindItemById() { CHILD_1.setId(12345); CHILD_2.setId(23456); itemGroup.addChild(CHILD_1); itemGroup.addChild(CHILD_2); assertWithMessage("Find item 23456 should return child 2") .that(itemGroup.findItemById(23456)) .isSameAs(CHILD_2); }