2009-07-20 2 views
1

を生成します。私は部品番号を介した形質転換法をテストするプロセスにいるよと私は処理する方法がわからない行動につまずいてきました。 PropertyInfoを取得するためにMoqオブジェクトを反映すると、2つの追加オブジェクトが取得されます。は、私は別のオブジェクト型から変換するためにリフレクションを使用する方法をいくつか持っている2つの追加プロパティ

  • Moq.Mock``1[Namespace.Class+IElement] Mock
  • Moq.Mock Mock

これを再現するコードは以下の通りです:

public void Moq_Reflection() { 
    var realElement = new Stuff(); 

    // Produces 2 items 
    PropertyInfo[] pInfo = realElement.GetType().GetProperties(); 

    var mockElement = new Mock<IElement>(); 
    mockElement.Setup(e => e.Property1).Returns(12); 
    mockElement.Setup(e => e.Property2).Returns(42); 

    // Produces 4 items 
    pInfo = mockElement.Object.GetType().GetProperties(); 
} 

public interface IElement { 
    int Property1 { get; set; } 
    int Property2 { get; set; } 
} 

public class Stuff : IElement 
{ 
    public int Property1 
    { 
     get { return -1; } 
     set { } 
    } 

    public int Property2 
    { 
     get { return -2; } 
     set { } 
    } 
} 

は、これらのプロパティを取得する部品番号のオブジェクトに反映されないようにする方法はありますか?

答えて

0

私はLinqPadのコードを見ていた、と私は、これらの2つのプロパティを切り出すために見つけることができる唯一のソリューションは、PropertyTypeはや名前は「モック」に含まかどうかに基づいて、それらを除外することでした。例:

pInfo.Where(item => item.PropertyType.ToString().Contains("Mock") == false); 
pInfo.Where(item => item.Name.Contains("Mock") == false); 

これは境界線のハッキーですが、これはフィルタリングするための唯一の属性です。反射自体をフィルタリングする方法はないと思います。

+0

私はそれがそうである必要はないと思っていました。あなたのテストを補うためにあなたのメインアプリにコードを書くことよりも醜いことはありません。おかげさまで、私は助けに感謝します! –

1

私は今日の午後、このより考えていたので、ここで別のアイデアがあります。

私は自分のプロジェクトでこれをコーディングしていた場合、私は、オブジェクトの反射うち抽象思います。私は、オブジェクトのプロパティを返す、[プロパティのセットを返すためにリフレクションを使用して、そのインターフェースを実装するクラスを作成するクラスの契約を定義するインターフェイスを作成したいです。おそらくあなたがやっていることと同じです。

しかし、テストでは、私はインターフェイスの新しい実装を作成したいと思いますが、私はモックオブジェクトの不要なプロパティをフィルタリングするために必要なルールを追加します。私のライブコードには、テストに必要なコードは含まれていません。

私はちょうど助けようとしているそのアイデアを出さなければなりませんでした。がんばろう!

関連する問題