Я бы подкласс ManagementException
и в подклассе переопределил геттер ErrorCode
(если нормальные уровни защиты мешают вам сделать это, возможно, интроспекция может приблизить вас). Любой код, который обрабатывает ManagementException
, но никогда не слышал о вашем конкретном подклассе, должен обрабатывать ваш подкласс «как если бы», в конце концов, ManagementException
вы пытаетесь смоделировать для целей тестирования.
Редактировать : вполне возможно, что ErrorCode
просто невозможно переопределить (я ненавижу настолько жесткие языки, что они могут прекратить тестирование таким образом, но не могут отрицать, что они существуют ;-). В этом случае Внедрение зависимостей все еще может спасти вас - DI - один из моих любимых шаблонов для тестирования.
Цель DI в тестировании - отделить тестируемый код от жестких допущений, которые будут препятствовать тестируемости - и это только то, что мы имеем здесь, хотя и в необычной форме. Ваш тестируемый код в настоящее время, скажем, x.ErrorCode
, чтобы получить код ошибки исключения x. Очень хорошо, тогда он должен сделать вместо этого getErrorCode(x)
, где getErrorCode
- делегат, который обычно просто делает return x.ErrorCode
; и он должен иметь установщик для делегата getErrorCode
, чтобы в целях тестирования вы могли изменить его на делегат, который выполняет return 23
(или любое другое значение кода ошибки, которое вы хотите смоделировать для тестирования).
Детали могут различаться, но внедрение зависимостей может (среди прочего) помочь компенсировать некоторые виды чрезмерной жесткости в объектах, которые вы неизбежно получаете из системы (или из других библиотек и т.д., которые вы не можете напрямую изменить), как в этом примере.