Здесь проверенное исключение выдается javax.xml.datatype.DatatypeFactory.newInstance()
.
Это статический метод. Таким образом, вы не можете издеваться прямо.
1) В качестве альтернативы вы можете попытаться найти сценарий, который может спровоцировать возникновение исключения.
Поехали. Исключение составляет здесь:
private static <T> T findServiceProvider(final Class<T> type)
throws DatatypeConfigurationException{
try {
return AccessController.doPrivileged(new PrivilegedAction<T>() {
public T run() {
final ServiceLoader<T> serviceLoader = ServiceLoader.load(type);
final Iterator<T> iterator = serviceLoader.iterator();
if (iterator.hasNext()) {
return iterator.next();
} else {
return null;
}
}
});
} catch(ServiceConfigurationError e) {
final DatatypeConfigurationException error =
new DatatypeConfigurationException(
"Provider for " + type + " cannot be found", e);
throw error;
}
}
Таким образом, DatatypeConfigurationException
выбрасывается, когда ServiceConfigurationError
брошен и пойман. Но ServiceConfigurationError
- это ошибка, а не исключение.
Попытка смоделировать ошибку становится очень хакерской.
2) Другая альтернатива для проверки: обернуть DatatypeFactory.newInstance()
в экземпляр вашего собственного класса.
Таким образом, вы можете без труда издеваться над ним:
public class DataTypeFactoryWrapper {
public DatatypeFactory newInstance(){
return DatatypeFactory.newInstance();
}
}
Теперь измените ваш код следующим образом:
private DataTypeFactoryWrapper dataTypeFactoryWrapper;
//...
xmlGregorianCalendar = dataTypeFactoryWrapper.newInstance().newXMLGregorianCalendar(dateString);
Теперь вы можете высмеивать dataTypeFactoryWrapper
в вашем тестовом классе.
3) Последний вариант: не проверяйте его. Считайте, что это так, это оболочка Error
и Error
сложно / сложно проверить.
Что бы ни объяснял Javadoc:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы
что разумное приложение не должно пытаться поймать. Большинство таких
ошибки ненормальные условия