### Question:
ValueSetValidator implements Validator { @Override public void validateValue(Property property, Object value) throws ValidationException { if (value != null || propertyDescriptor.isNotNull()) { if (!propertyDescriptor.getValueSet().contains(value)) { } } } ValueSetValidator(PropertyDescriptor propertyDescriptor); @Override void validateValue(Property property, Object value);  }### Answer:
@Test public void testGoodNull() throws Exception { final PropertyDescriptor descriptor = createPropertyDescriptor(); descriptor.setNotNull(false); new ValueSetValidator(descriptor).validateValue(createProperty(descriptor), null); }
@Test(expected = ValidationException.class) public void testBadNull() throws Exception { final PropertyDescriptor descriptor = createPropertyDescriptor(); descriptor.setNotNull(true); new ValueSetValidator(descriptor).validateValue(createProperty(descriptor), null); }
@Test public void testGoodValues() throws Exception { final PropertyDescriptor descriptor = createPropertyDescriptor(); descriptor.setNotNull(false); final ValueSetValidator validator = new ValueSetValidator(descriptor); validator.validateValue(createProperty(descriptor), "a"); validator.validateValue(createProperty(descriptor), "b"); validator.validateValue(createProperty(descriptor), "c"); }
@Test(expected = ValidationException.class) public void testBadValue() throws Exception { final PropertyDescriptor descriptor = createPropertyDescriptor(); descriptor.setNotNull(false); final ValueSetValidator validator = new ValueSetValidator(descriptor); validator.validateValue(createProperty(descriptor), "d"); }