2011-04-28 33 views
4

我有兩個C#項目Model和ModelTest。模型由ActiveRecord對象組成(Hibernate包裝)。在ModelTest中,我創建了一個簡單的單元測試:在調試時,NHibernate/Npgsql在CreateSchema時拋出異常UnitTest

[TestClass] 
public class UnitTest1 
{ 
    [TestInitialize] 
    public void Init() 
    { 
     Model.Init(); 
     Model.CreateSchema(); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
    } 
} 

Model.Init()用ActiveRecord註冊所有類型的裝配模型。 Model.CreateSchema()封裝ActiveRecordStarter.CreateSchema(),它調用NHibernate的CreateSchema()。

如果我運行單元測試,此代碼工作正常,但如果我「調試」單元測試失敗。在調試模式,在CreateSchema()發生異常:

NpgsqlException: 'ERROR: 42P01: table "user" does not exist' 

唯一的例外似乎是SQL調用「下拉表中用戶串聯」,這顯然失敗如果數據庫在運行測試之前空期間提出的。我假設在創建新表之前始終發送放置。

在調試模式下,Npgsql的行爲與關於丟棄查詢的結果有何不同?

+0

你有沒有找到這個答案?我遇到了同樣的問題... – Farray 2011-07-29 05:44:01

+0

不幸的是,我堅持使用沒有調試模式的運行單元測試.. – Tarnschaf 2011-07-29 12:00:30

回答

1

我的問題與Tarnschaf相同 - SchemaUpdate.Create(...)會失敗,並且有問題的sql爲drop table "tablename" cascade,導致上面提到的相同的「表不存在」錯誤。

事實證明,其中一個項目引用了一個不在同一位置的與Nhibernate相關的程序集。我不確定爲什麼在解決方案被清洗&重建時沒有顯示。從項目中刪除所有引用並重新添加它們解決了問題(對我而言)。

只是發佈這個以防萬一它幫助其他人在路上。 Nhibernate異常沒有什麼幫助。

+0

我不能再現錯誤,所以我會接受這個答案,因爲它至少是我的一個可能的原因以前的問題。謝謝。 – Tarnschaf 2011-07-31 15:01:46