1

そのプロパティに基づく他のメンバーがセットアップを必要としないように、1 つのプロパティをモックしてセットアップするにはどうすればよいですか。

public interface IFoo{
    public Foo  { get; set; }
    public Foo2 { get; }
}

public class Foo :IFoo{
    public Foo  { get; set; }
    public Foo2 { get {return this.Foo +" second";} }
}


public void FooTest(){
    var f = Mock<IFoo>();
    f.SetupGet(x=> x.Foo).Returns("Foo");

    // Should print 'Foo second' although there's no setup for Foo2
    Console.Write(f.Object.Foo2); 
}
4

3 に答える 3

2

Fooあなたの質問では、クラス内のプロパティFooがメンバーであるクラスと同じ名前であることは紛らわしいです(C#では違法です) 。また、プロパティのタイプがありません (おそらくstring)。ですから、コンパイルできるコードを考えてください。

Mock<>あなたがそれをした後、私はあなたがインターフェースのみを参照していることは明らかだと思いますIFoo。を実装する多くのクラスと構造体が存在する可能性がありますIFoo。Moqは、2 つのプロパティのゲッター間に接続があるクラスについて考えていたことをどのように知ることができたでしょうか? Foo

IFoo、2 つのプロパティ間に必要な関係を指定できません。それはインターフェースです。

于 2013-02-25T23:33:49.623 に答える
2

あなたの例では、IFoo インターフェイスのモックを作成しているため、Foo2 プロパティの実装はありません。この場合、Foo オブジェクトをインスタンス化することはないため、Foo オブジェクトの実装は関係ありません。f は IFoo のモックであるため、両方が同じインターフェイスを実装することを除いて、オブジェクト Foo とは何の関係もありません。このようなことを試しましたか?

var f = Mock<IFoo>();
f.SetupGet(x => x.Foo).Returns("Foo");
f.SetupGet(x => x.Foo2).Returns(f.Foo + "Second");

ただし、何を達成しようとしているのか正確にはわかりませんので、推測しています。

于 2013-02-25T22:56:24.987 に答える
1

なぜこれをしたいのか完全にはわかりませんが、私が最初に考えたのは、リフレクションを使用してクラスのメンバーをループし、それぞれをセットアップすることですが、なぜ誰かがこれを行うのかはよくわかりません. 時間を節約しようとしていると思いますか?

完全に適用できるわけではありませんが、関連性があるため、これをニーズに合わせて成形できます。

テスト ケースのモック オブジェクトの生成

于 2013-02-25T22:50:55.027 に答える