OptionImpl implements Option<V> { @Override public V getValue() { return value; } OptionImpl();  OptionImpl(V value); @Override V getValue(); @Override synchronized void setValue(V value); @Override void addWatcher(OptionWatcher<V> watcher); @Override void removeWatcher(OptionWatcher<V> watcher);  }
@Test(groups = "fast") public void testGetValueUninitialized() throws Exception { Assert.assertNull(option.getValue()); }
@Test(groups = "fast") public void testGetValue() throws Exception { option.setValue("testing"); Assert.assertEquals(option.getValue(), "testing"); }
@Test(groups = "fast") public void testInitialValue() throws Exception { Assert.assertEquals(new OptionImpl<>("test").getValue(), "test"); }