2016-03-27 13 views
4

JSONを匿名型として返すコントローラをテストするユニットテストを書く必要があります。私がそれにルートノードを追加する必要があるため、これは匿名で匿名型のユニットテスト - JSON

唯一の理由はあるので、コントローラからのリターンは次のようになります。これは、「ユーザーとJSONへのルートノードを追加します

return Json(new { User = person }); 

"、続いてPersonオブジェクトがJSONにシリアル化されています。

これは問題なく動作しますが、私の問題は単体テストにあります。

このような匿名型をテストする唯一の解決策は、まずAssemblyInfo.csでInternalsVisibleToを使用してテストプロジェクトを表示し、次にdynamicを使用して結果を取得することです。

dynamic results = userController.GetPerson(1); 
    dynamic content = results.Content; 

これはobjectはContentプロパティを持っていないと言って、二行目で失敗します。ただし、デバッガの下には、Contentプロパティが表示されます。

これをテストするにはどうすればいいですか?

Error

Content Property

答えて

2

で行われるようにGetPersonを呼び出す前に、動的オブジェクトをインスタンス化することができます。

[assembly: InternalsVisibleTo()]属性で問題が発生しました。

私はこれを誤ってユニットテストプロジェクトに入れましたが、匿名タイプがコントローラから返されていたWeb APIアプリケーションには入れていませんでした。

これをWeb APIプロジェクトのAssemblyInfo.csファイルに追加し、属性を持つユニットテストプロジェクト名を使用するとエラーが発生し、dynamicオブジェクトが期待どおりに作成されます。

Valid dynamic Content property

0

あなたは、私がこの問題を解決し、それがここに

C# ‘dynamic’ cannot access properties from anonymous types declared in another assembly

+0

results.Contentが有効です。私はVisual Studioデバッガでそれを見ることができ、有効なオブジェクトが含まれており、プロパティが設定されています。なぜここで 'dynamic'オブジェクトを扱っているときに' object'に 'Content'プロパティが含まれていないと主張しているのか理解できませんが、Visual Studioデバッガのオブジェクトを見て、内容 '、それはすべて有効です。 – Patrick

+0

GetPersonを呼び出す前に、ダイナミックオブジェクトをインスタンス化することができます。 http://stackoverflow.com/questions/2630370/c-sharp-dynamic-cannot-access-properties-from-anonymous-types-declared-in - ノー –

関連する問題