我正在使用 Fluent NHibernate 并尝试进行单元测试。现在我有一个基本测试类,如下所示:
[TestClass]
public abstract class BaseTest<TEntity> where TEntity : IBaseModel
{
private const string testDbFile = "test.db";
private static ISessionFactory sessionFactory;
protected static ISession session;
[TestMethod]
public void configureDB()
{
try
{
if (sessionFactory == null)
{
sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(testDbFile))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdminTest>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.Message);
}
}
private static void BuildSchema(Configuration config)
{
new SchemaUpdate(config).Execute(false, true);
}
[TestMethod]
public void sessionCreated()
{
session = sessionFactory.OpenSession();
}
[TestMethod]
public virtual void AddEntity_EntityWasAdded()
{
var entity = BuildEntity();
InsertEntity(entity);
session.Evict(entity);
var reloadedEntity = session.Get<TEntity>(entity.Id);
Assert.IsNotNull(reloadedEntity);
AssertAreEqual(entity, reloadedEntity);
AssertValidId(reloadedEntity);
}
还有其他方法可以更新和删除实体。我有AdminTest
继承的类BaseTest
。在AdminTest
我有以下方法:
[TestClass]
public class AdminTest : BaseTest<Admin>
{
[TestMethod]
public void SelectWorks()
{
IList<Admin> admins = session.QueryOver<Admin>().List();
Assert.AreNotEqual(0, admins.Count);
}
}
在这里我总是有例外,因为 session 是null
. 也许我在思考视觉工作室如何执行单元测试的方式上是错误的(我是新手)?现在我这样想,视觉工作室的工作方式如下
- 从中运行测试方法
BaseTest
(它在那里配置数据库并创建会话) - 运行
selectWorks
方法。在这里我想它应该使用session
fromBaseTest
你能解释一下我的思维方式有什么问题吗?而且我希望能够从子类中查询,正确的方法是什么?谢谢,任何帮助表示赞赏,。