Как смоделировать SoapException, используя Moq для обработки ошибок модульного теста

Я унаследовал небольшое консольное приложение, которое выполняет вызовы веб-службы SOAP. Это трагический беспорядок вложенных попыток захвата, которые регистрируют исключения различными способами, и я хотел бы обернуть некоторое тестовое покрытие вокруг того, как оно ведет себя, когда генерируется SoapException.

Вопрос: Как я могу смоделировать класс, такой как SoapException, используя Moq, когда я не могу смоделировать интерфейс и не могу сделать свойства или методы «виртуальными»?

Еще немного объяснения:

Чтобы проверить эту обработку ошибок, мне нужно контролироватьActor свойство объекта SoapException, а такжеDetail свойство для проверки обработки ошибок.

Фрагмент кода моего модульного теста:

[TestMethod]
public void MyTestMethod()
{
    Mock<SoapException> soapMock = new Mock<SoapException>(MockBehavior.Strict);

    soapMock.SetupGet<string>(ex => ex.Actor).Returns("Test Actor");

Так как я издеваюсь над конкретным классом, аActor свойство не помечено как «Виртуальное», Moq выдает это исключение при выполненииSetupGet(...) линия во время пробного запуска:

System.NotSupportedException: недопустимая установка для не виртуального (переопределяемого в VB) члена: ex => ex.Actor

После некоторого прочтения идеальный ответ - смоделировать интерфейс, что я не могу сделать в этом случае. Так как это класс, встроенный в .NET Framework, я также не могу волшебным образом пометитьActor собственность как виртуальная.

Как я могу издеваться над SoapException или есть другой способ проверить обработку ошибок?

Кроме того, я сначала углубился в создание реальной SoapException с некоторыми узлами XML внутри него, но я быстро упал в кроличью нору программного создания дерева документов XML. яМожно сделайте это, но для этого потребуется гораздо больше строк кода тестовой настройки, которых я бы хотел избежать, если это возможно.

Ответы на вопрос(2)

Ваш ответ на вопрос