Как смоделировать 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. яМожно сделайте это, но для этого потребуется гораздо больше строк кода тестовой настройки, которых я бы хотел избежать, если это возможно.