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);
}
}
ここでは、セッションが であるため、常に例外がありnull
ます。ビジュアルスタジオが単体テストを実行する方法についての考え方が間違っているのかもしれません (私は初心者です)。今思うと、ビジュアルスタジオは以下のように動いています
- テストメソッドを実行
BaseTest
します(データベースを構成し、セッションを作成します) - メソッドを実行し
selectWorks
ます。ここsession
から使用する必要があると考えていましたBaseTest
私の考え方のどこが間違っているのか説明してもらえますか? そして、子クラスからクエリできるようにしたいのですが、正しい方法は何ですか? ありがとう、助けていただければ幸いです。