Cómo simular SoapException usando Moq para manejar el error de la prueba de unidad

He heredado una pequeña aplicación de consola que realiza llamadas a un servicio web SOAP. Es un caos trágico de intentos y capturas anidadas que registran las excepciones de varias maneras, y me gustaría incluir alguna cobertura de prueba sobre cómo se comporta cuando se produce una SoapException.

Pregunta: ¿Cómo puedo simular una clase como SoapException utilizando Moq cuando no puedo simular una interfaz y no puedo hacer que las propiedades o los métodos sean "virtuales"?

Un poco más de explicación:

Para probar este manejo de errores, necesito controlar elActor propiedad del objeto SoapException, así como laDetail Propiedad para verificar el manejo de errores.

Un fragmento de mi código de prueba de la unidad:

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

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

Desde que me estoy burlando de una clase concreta, y laActor la propiedad no está marcada como "Virtual", Moq está lanzando esta excepción al ejecutar elSetupGet(...) línea durante la ejecución de la prueba:

System.NotSupportedException: configuración no válida en un miembro no virtual (anulable en VB): ex => ex.Actor

Después de una lectura, la respuesta ideal es simular una interfaz, lo que no puedo hacer en este caso. Ya que esta es una clase incorporada al marco .NET, tampoco puedo marcar mágicamente elActor Propiedad como virtual.

¿Cómo puedo simular una SoapException o hay una forma diferente de verificar el manejo de errores?

Dejando de lado, primero me metí en la creación de una SoapException real con algunos nodos XML en su interior, pero rápidamente caí en el agujero de conejo de la creación programática de un árbol de documentos XML. yopuede hacerlo, pero requeriría muchas más líneas de código de configuración de prueba, que me gustaría evitar si es posible.

Respuestas a la pregunta(2)

Su respuesta a la pregunta