我有一個類從基類擴展到另一個dll的基類。單元測試奇怪的東西
public class MyMicroBlogCache : RelatedBase<THZUserInfo, MicroBlogCacheModel, int>
和在構造函數中,在基類注入ICACHE
public MyMicroBlogCache(ICache cache,....
,我使用ICACHE中的方法(例如空隙A())
和我寫一個單元測試,嘲笑ICACHE
var cache = Substitute.For<ICache>();
cache.PageRelated<THZUserInfo, MicroBlogCacheModel, int>("My", 2217, 0, 3, out all, true)
.Returns(
x =>
{
var list = new List<MicroBlogCacheModel>();
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
return list;
});
模擬與NSubstitute
var cache1 = new Mock<ICache>();
cache1.Setup(ca => ca.PageRelated<THZUserInfo, MicroBlogCacheModel, int>("My", 2217, 0, 3, out all, true))
.Returns(
() =>
{
var list = new List<MicroBlogCacheModel>();
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
return list;
});
或模擬與MOQ
和奇怪的是:
當我調用基類(RelatedBase)的方法寫入,該方法(例如A())調用模擬ICACHE,它不返回模擬數據。
如果我重寫子類(MyMicroBlogCache)中的方法,並使用相同的代碼(覆蓋並從基類複製代碼),它會返回模擬數據。
如果我重寫,並使用base.A(...),它不會返回模擬數據。
因此,當在基類中的代碼出現錯誤,並且在子類中的代碼時,它是正確的。
如果我創建一個類實現ICache,那麼
NSubstitute和Moq都是一樣的。
我嘗試這與vs2015,vs2013; .NET 4.5
爲什麼會發生,以及如何解決它
更新:
var cache1 = new Mock<ICache>(MockBehavior.Strict);
cache1.Setup(ca => ca.PageRelated<THZUserInfo, MicroBlogCacheModel, int>("My", 2217, 0, 3, out all, true))
.Returns(
() =>
{
var list = new List<MicroBlogCacheModel>();
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
list.Add(new MicroBlogCacheModel { Id = 1, UserId = 2217 });
return list;
});
然後測試方法調用
var r = my.GetRelatedPage(2217, 0, 3, out all, true);
在基類中它叫
var list = cache.PageRelated<TMainKey, TChild, TMainKey>("My", key, skip, take, out all, desc);
鍵= 2217,跳過= 0,取= 3,DESC = TRUE,
B:和AルM ,所以如果我使用B.m,它爲m 。我不明白爲什麼你說這不一樣,你能解釋一下嗎? –
chenZ
,我嘗試新的模擬(MockBehavior.MockStrict)它不拋出MockException –
chenZ
你可以添加你的問題嗎? –