Что касается тестирования, то надёжнее всего будет сделать интерфейс для имитации сбоев. Например, флажок завести какой-то, который будет приводить к облому выделения памяти. Никто не запрещает ориентироваться на тестирование и официально его поддерживать на уровне интерфейса модуля.

Это как пунктирные "линии отрыва" на бумажных билетах. Если не нужно отрывать, они не мешают, но когда нужно оторвать, будет разрыв по предусмотренной траектории. Так же и тестирование с заложенными в код возможными проблемами: IF (result = NIL) OR imitateOutOfMemory THEN ...

Или так:
## Код:
```
IF imitateOutOfMemory THEN
    result = NIL
ELSE
    NEW(result)
END
```
