2011-04-28 88 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

相关问题