4
我有一個相對簡單的抽象類。我爲這個問題進一步簡化了它。如何告訴我的抽象類的模擬/存根使用它的Object.Equals()覆蓋?
public abstract class BaseFoo
{
public abstract string Identification { get; }
//some other abstract methods
public override bool Equals(object obj)
{
BaseFoo other = obj as BaseFoo;
if(other == null)
{
return false;
}
return this.Identification.Equals(other.Identification);
}
}
我想弄清楚如何編寫一個單元測試,以確保對象等於重寫作品。我試圖創建一個模擬,但是當我把模擬作爲一個對象並調用Equals時,它不會在抽象類中調用我的代碼。它只是立即返回false。如果我將它添加到列表中並且在列表中調用.Remove或.Contains,則相同;仍然只是返回false而不會觸及我的抽象類中的代碼。
我使用mstest和rhino mocks。
爲了完整起見,這裏是我希望的工作,但沒有一個試驗:
[TestMethod]
public void BaseFoo_object_Equals_returns_true_for_Foos_with_same_Identification()
{
var id = "testId";
var foo1 = MockRepository.GenerateStub<BaseFoo>();
var foo2 = MockRepository.GenerateStub<BaseFoo>();
foo1.Stub(x => x.Identification).Return(id);
foo2.Stub(x => x.Identification).Return(id);
Assert.IsTrue(((object)foo1).Equals(foo2));
}