クラスの2つのモックオブジェクトを作成しようとしましたが、同じアセンブリ "FullName"を持つ2つのモックを作成します。Rhino.Mocks:異なるアセンブリフルネームのクラスのスタブを作成する方法
public class MyClassA : SomeAbstractClass, ISomeInterface1, ISomeInterface2
{
public MyClassA(string someData) : base(someData)
{
//this property defined in base class
CheckId = GetType().FullName;
}
internal override string CheckId { get; }
}
public class TestClass
{
[Test]
public void TestMethod()
{
var stub1 = new MockRepository().StrictMock<MyClassA>("some data 1");
var stub2 = new MockRepository().StrictMock<MyClassA>("some data 2");
Assert.AreEqual(stub1.CheckId, stub2.CheckId);
}
}
上記のアサーションは真であり、私は間違っていると予想しました。
CheckIdを提供する別のインターフェイスを作成できますが、実動コードで同じ環境を作成したいと思います。
私の質問は、CheckIdプロパティが異なる場合でも、Rhinoモックが異なるオブジェクトに対して同じクラス名を生成する理由です。
テストロジックを変更せずに同じクラスの異なる模擬インスタンスを作成する方法はありますか?
他の詳細が必要な場合はお知らせください。前もって感謝します。
UPDATE:私は手動でプロパティを更新するよりも、より良い解決策を見つけた
を解決しました。一般的なタイプのMyClassAを作成することで、この問題が解決されます。あなたが以下で見ることができるように;
public class MyClassA<TDummy> : SomeAbstractClass, ISomeInterface1, ISomeInterface2
{
public MyClassA(string someData) : base(someData)
{
//this property defined in base class
CheckId = GetType().FullName;
}
internal override string CheckId { get; }
}
public class TestClass
{
[Test]
public void TestMethod()
{
var mock1 = MockRepository.GenerateMock<MyClassA<int>>("some data 1");
var mock2 = MockRepository.GenerateMock<MyClassA<bool>>("some data 2");
Assert.AreEqual(stub1.CheckId, stub2.CheckId);
}
}
異なるダミータイプのため、生成されたモックはすべて同じベースタイプの異なるインスタンスです。そして、私が期待したように、すべての主張は偽です。
これは反射の誤解です。アサーションは正しいです。反映されたときに作成される2つのクラスは、同じタイプを提供します。 – Nkosi
私の目標は、さまざまなチェックID(クラスfullnameを参照)を持つ2つのモックインスタンスを作成することです。しかし私がバックグラウンドで理解しているように、モックロジックはリフレクション中に同じタイプの同じクラス名を生成します。 –