私はプロパティが非仮想であり、継承の2つのレイヤーがあるメソッドをテストしようとしています - したがって私はモックを作成することはできません。私は偽物を作成しましたが、何らかの理由でプロパティ値がまだ空です。テストは、私は2つの通貨のプロパティとVAR通貨を参照してください実行しているいくつかの理由非仮想文字列プロパティをオーバーライド
public class Cart {
public string Currency { get; set; } // I'm trying to override this
}
// My fake class
public class CartFake : Cart
{
public new string Currency { // This should hide SomeBaseBase.Cart.Currency - but it does not
get { return "USD"; }
set { value = "USD"; }
}
}
public abstract class SomeBaseBase {
public virtual Cart Cart { get; set; }
}
public class Base : SomeBaseBase {
public string OtherProperties { get; set; }
}
// class under test
public class SomeClassFake : Base {
public override Cart Cart => new CartFake();
// Then when test is running I have this
var currency = Cart.Currency // returns "" - when debugging I see two "Currency" properties and currency gets populated with ""
}
= USD「の代わりに」「通貨を取得します」
理由は何ですか? USDに人が住むようにするにはどうすればいいですか?
EDIT:何らかの理由でラインについては
public class CartFake : Cart
{
public CartFake() : base()
{
Currency = "USD";
}
}
:Cart.Currencyはまだ空である:(
を返すようにしたいプロパティの
CartFake
オブジェクトにCart
をキャストする必要があります。あなたは実際に 'Cart.Currency'を' CartFake'のコンパイル時の視点から隠していますが、それを上書きしているわけではないので、 '' Cart.Currency''を 'var currency = Cart.Currency; 'それは' FakeCart'について何も知らない。 –問題は、Cartはサードパーティのライブラリであり、私はそれを変更できないということです。これを回避する方法はありますか?私は通貨を設定しようとしましたが(plsはEDITを参照してください)、var通貨はまだ ""となります – BobSwanson
これは役に立つかもしれません:http://stackoverflow.com/questions/6484/how-do-you-mock-a-sealed-クラス – john