Как выполнить модульное тестирование производного класса SoapExtension? - PullRequest
2 голосов
/ 10 июня 2011

У меня есть класс, производный от SoapExtension.Для модульного тестирования, например, метода ProcessMessage (SoapMessage), мне необходимо ввести SoapMessage, который является абстрактным классом.Когда я пытаюсь это сделать, я получаю сообщение об ошибке, в котором говорится, что в нем нет конструкторов.Даже если бы я создал новый класс, производный от SoapMessage, я не смогу создать свой собственный конструктор.Я не могу обойти это с помощью макета, потому что мне нужно иметь возможность установить свойство SoapMessage.Stage, чтобы ProcessMethod мог выполнить свой оператор switch, но это свойство доступно только для чтения.Как я могу получить свой собственный производный класс SoapMessage, в котором я могу установить свойство .Stage или это невозможно и, следовательно, невозможно провести модульное тестирование?

Пример:

public override void ProcessMessage(SoapMessage message) 
{
  switch (message.Stage) 
  {
     case SoapMessageStage.BeforeSerialize:
        break;
     case SoapMessageStage.AfterSerialize:
        WriteOutput( message );
        break;
     case SoapMessageStage.BeforeDeserialize:
        WriteInput( message );
        break;
     case SoapMessageStage.AfterDeserialize:
        break;
  }
}

Вы можете увидетьобъяснение SoapMessage из MSDN: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapmessage.aspx

1 Ответ

0 голосов
/ 30 ноября 2011

Есть некоторые типы, которые наследуются от SoapMessage, но у всех есть внутренние конструкторы.Я не смог найти API для создания SoapMessage, поэтому вам может потребоваться использовать отражение для создания типа следующим образом.

SoapMessage CreateSoapClientMessage()
{
    return (SoapClientMessage)Activator.CreateInstance(
        typeof(SoapClientMessage),
        BindingFlags.Instance | BindingFlags.NonPublic,
        null,
        new object[] { null, null, null },
        null);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...