0

要約すれば

XML文字列を通常はサードパーティのWebサービスによって返されるオブジェクトに逆シリアル化する方法が必要です。

C#を使用します。

詳細に

サードパーティのサービスリファレンス(Webサービス)を使用するコードがあります。通常は、Requestオブジェクトを渡して、Responseオブジェクトを返します。

ユニットテストについて-これはサードパーティのサービスであるため、サービスリファレンスの内部動作には興味がありません。私が興味を持っているのは2つだけです。

  1. 私のコードは正しいRequestオブジェクトを生成しますか?
  2. サービスリファレンスが応答を返すとき、この応答を正しく処理しますか?

それぞれを順番に取る:

私のコードは正しいRequestオブジェクトを生成しますか?

これは私にできます。誰かがこれに興味があるなら、私がすることは私のサービス参照をRhinoMocksモックオブジェクトに置き換えることです。単体テストでは、Mockのメソッドを呼び出してから、渡された引数を確認し、実際のRequestオブジェクトを期待されるRequestオブジェクトと比較します。

サービスリファレンスが応答を返すとき、この応答を正しく処理しますか?

ここで実行したいのは、サービス参照のRhinoMocksスタブを作成することです。これにより、このスタブが呼び出されると、テストデータが入力された応答オブジェクトが返されます。

私が直面している問題は、この特定のサードパーティサービスによって返される応答オブジェクトが非常に複雑であるということです。すべてのプロパティ値を手動でハードコーディングして作成しようとすると、おそらく1日の大部分を占めることになります。

ただし、私が非常に簡単にできることは、このサービスからXMLシリアル化された応答をキャプチャすることです。次に、その値を簡単に編集して、このXMLを単体テストの1つに格納できます。

私が求めているのは、この「テスト」XMLを応答オブジェクトに「逆シリアル化」し、これを使用してスタブからの応答をプログラムする簡単な方法です。

どんな助けでも大歓迎です。

ありがとう

グリフ

4

1 に答える 1

0

これは非常に単純であることがわかります。

public static object Deserialize(string xml, Type toType)
{
    using(Stream stream = new MemoryStream())
    {
        byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
        stream.Write(data, 0, data.Length);
        stream.Position = 0;
        var s = new XmlSerializer(toType, "http://^your url^");
        return s.Deserialize(stream);
    }
}

SOAPリクエストからXMLを使用している場合は、最初にSOAPエンベロープを削除することに注意してください。

グリフ

于 2012-12-06T17:08:23.330 に答える