Como simular SoapException usando Moq para tratamento de erros de teste de unidade

Eu herdei um pequeno aplicativo de console que faz chamadas para um serviço web SOAP. É uma bagunça trágica de tentativas aninhadas de registrar exceções de várias maneiras, e eu gostaria de incluir uma cobertura de teste sobre como ela se comporta quando uma SoapException é lançada.

Pergunta: Como posso zombar de uma classe como SoapException usando Moq quando não posso zombar de uma interface e não posso tornar propriedades ou métodos "virtuais"?

Um pouco mais de explicação:

Para testar esse tratamento de erros, preciso controlar oActor propriedade do objeto SoapException, bem como oDetail propriedade para verificar o tratamento de erros.

Um trecho do meu código de teste de unidade:

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

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

Desde que eu estou zombando de uma classe concreta, e oActor propriedade não está marcada como "Virtual", o Moq lança essa exceção ao executar oSetupGet(...) linha durante a execução do teste:

System.NotSupportedException: instalação inválida em um membro não virtual (substituível no VB): ex => ex.Actor

Após algumas leituras, a resposta ideal é zombar de uma interface, o que não posso fazer neste caso. Como essa é uma classe incorporada ao .NET framework, também não posso marcar magicamente oActor propriedade como virtual.

Como posso zombar de uma SoapException, ou existe uma maneira diferente de verificar o tratamento de erros?

Como um aparte, eu comecei a criar uma SoapException real com alguns nós XML, mas rapidamente caí no buraco de criar programaticamente uma árvore de documentos XML. Eupode fazê-lo, mas exigiria muito mais linhas de código de configuração de teste, que eu gostaria de evitar, se possível.

questionAnswers(2)

yourAnswerToTheQuestion