0

我在mvc web api中使用存儲庫模式。 Dbcontext類不會爲少數實體返回任何數據,而會爲其他實體獲取所有行。 我在客戶端使用微風。當使用微風查詢從客戶端調用存儲庫方法時,將返回數據。 當我試圖單元測試控制器方法時,我發現上下文類不返回任何數據。實體框架不爲少數實體返回數據

[Table("QaItemGrouping")] 
public class QaItemGrouping 
{ 
    [Key] 
    public int QaItemGroupingCd { get; set; } 

    public string QaItemGroupingDesc { get; set; } 

    public ICollection<QaItem> QaItems { get; set; } 
} 

以上是實體的模型類。

的的DbContext類包含以下屬性:

public DbSet<QaItemGrouping> QaItemGroupings { get; set; } 

資源庫類有如下方法:

public DbQuery<QaItemGrouping> QaItemGroupings 
{ 
    get { return (DbQuery<QaItemGrouping>)Context.QaItemGroupings; } 
} 

在控制器類中的方法:

[HttpGet] 
public IQueryable<QaItemGrouping> QaItemGroupings() 
{ 
    return Repository.QaItemGroupings; 
} 
+0

我們也可以簡單地想知道你是否不會提供更多的細節。 – Shyju

+0

我添加了一些代碼。讓我知道你想要更多的細節? – user2585299

回答

0

也許你可能在測試項目中錯過了你的app.config。請將您的web.config內容複製到該app.config。這應該會使他們工作。

+0

但是在返回數據的測試項目的同一類中還有其他方法。 – user2585299

+0

其實,這對我有用。我只是複製並粘貼我的web.config到我的app.config。現在工作很好。 –

+0

哇,太棒了。 – Thanigainathan

1

這只是單元測試的問題嗎?不管怎樣,你不應該使用實時數據進行單元測試。如果你在單元測試中依賴數據庫,那麼你不是而是單元測試:你是集成測試,這是一整套其他的蠕蟲病毒。

這裏的正確過程是使用一個模擬框架來僞造一個可以測試的結果集。

1

我通常通過用包裝器包裝生成的數據上下文來解決這個問題。

是的,克里斯普拉特是正確的。嘲諷的目的只是在沒有外部數據輸入的情況下對類進行測試。

這裏是爲單元測試(mockable)代碼住的規則:

  • 使用接口基地規劃。
  • 使用延遲加載或構造函數注入對象。
  • 使用'有'而不是'是'的哲學。
  • 使用工廠創建對象或第三方IOC框架。
+0

我同意你們所有的單元測試。但是dbcontext類應該爲實體提供數據。 – user2585299

0

晚到晚會,但想提供一個WAG,因爲我看到了同樣的事情。可能微風是駱駝包裝的JSON,這使得一些實體看起來像他們不回來。