我已經創建了一些抽象方法的抽象基類叫做:驗證,如果一個抽象的方法是使用最小起訂量
public abstract class MyBaseClass<T> where T: class, IEntity
{
public T Load(long id)
{
//if in cache continue with cached value
//else make use of protected abstract LoadFromContext
}
protected abstract T LoadFromContext(long id);
}
現在我要檢查,如果LoadFromContext我們調用,但我得到一個錯誤:System.ArgumentException :成員FakeCacheRepository.LoadFromContext不存在
單元測試Moq的Setup其中FakeCacheRepository是派生型的MyBaseClass:
Mock<FakeCacheRepository> personRepoMock = new Mock<FakeCacheRepository>();
personRepoMock.Setup(x => x.Load(14)).Returns(new Person() { ID = 14, Name = "Developer14" });
personRepoMock.Protected().Setup("LoadFromContext");
var person = new FakeCacheRepository().Load(14);
Assert.AreEqual("Developer14", person.Name);
personRepoMock.Protected().Verify("LoadFromContext", Times.Once());
我做錯了什麼,是否有任何關於moq的好教程,以便更好地理解,而不必去Google提出每個問題。
嗨湯姆,不想在這裏開始討論如何構建代碼。在代碼應該被提取時,我應該如何繼承代碼,哪裏可以找到指導原則?這裏討論的基類正式名稱爲「CachedRepositoryBase」...所有緩存內容都放在這裏。只有連接特定的東西放在繼承的類中,仍然是緩存的存儲庫類(如此繼承)。目前這似乎對我而言是合法的。 –
我沒有任何特定的發送鏈接,但Google的一句「編寫可測試代碼」的短語引出了不少可能引起您關注的文章。 – TomDoesCode