2016-12-13 7 views
-1

私のプロジェクトでは、統合テストに使用されるテストデータのリポジトリがあります。このリポジトリを使用して、テストされるメソッドによって呼び出されるモックの作業単位を作成します。私はアサーションを実行するアクセス権を得ようとする際に問題が発生しています。模擬オブジェクトからプライベートメンバーにアクセス

私が主張したいデータがsource

enter image description here

の内部に保持されて、私は反射が、以下の戻りnullを使用して、非パブリックメンバーへのアクセスに見てきた:

PropertyInfo pInfo = vms.GetType().GetProperty("SourceInterface", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

SourceInterfacesourceに置き換えると、nullが返されます。

SourceInterfaceオブジェクトをsourceから取得する方法はありますか?

EDIT: 試験方法:試験下

[TestMethod] 
public void GetAllVMS_VMSReturned() 
{ 
    IEnumerable<SourceInterface> vms = controller.GetAllVMS(); 
    Assert.IsTrue(vms.ToList().Count > 0); //Throws NullReferenceException 
} 

方法:

public IEnumerable<SourceInterface> GetAllVMS() 
{ 
    return database.SourceInterfacesRepository.GetAll(); 
} 
+0

テストコールと一緒にテスト中のメソッドを追加します – Novastorm

+1

コードサンプルに基づいて、 'vms'はIEnumerableです。カスタムメソッドを期待するのは絶対に意味がありません。おそらくコピー貼りが悪いと思われます。[MCVE]が妥当かどうかを確認してください。 –

+0

質問には何も追加する必要はありません。おそらく私が提供できる他の情報は、テストが行​​われる前に注入された作業単位(この例ではデータベース)のセットアップだけです。 – Novastorm

答えて

1

sourceプロパティが、フィールドではありません。これを行う:

FieldInfo[] privateFields = vms.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 

必要に応じてprivateFieldsをフィルタリングできます。

+0

多くのありがとう!私はこのフィールドを追加した後にフィールドにアクセスできました – Novastorm