Я использую код Ayende из его блог на модульном тестировании с NHibernate и он требует тестирования с SQLite, код следующим образом:NUnit NHibernate и модульное тестирование Moq метания NHibernate.MappingException
using System;
using System.Reflection;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;
using NHibernate.Tool.hbm2ddl;
using Environment = NHibernate.Cfg.Environment;
namespace WebAPI.Tests
{
/// <summary>
/// http://ayende.com/blog/3983/nhibernate-unit-testing
/// </summary>
public class InMemoryDatabaseTest : IDisposable
{
private static Configuration _configuration;
private static ISessionFactory _sessionFactory;
protected ISession Session;
public InMemoryDatabaseTest(Assembly assemblyContainingMapping)
{
if (_configuration == null)
{
_configuration = new Configuration()
.SetProperty(Environment.ReleaseConnections, "on_close")
.SetProperty(Environment.Dialect, typeof(SQLiteDialect).AssemblyQualifiedName)
.SetProperty(Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName)
.SetProperty(Environment.ConnectionString, "data source=:memory:")
.AddAssembly(assemblyContainingMapping);
_sessionFactory = _configuration.BuildSessionFactory();
}
Session = _sessionFactory.OpenSession();
new SchemaExport(_configuration).Execute(false, true, false);
}
public void Dispose()
{
Session.Dispose();
}
}
}
Моего тестовый класс :
[TestFixture]
public class FilmsControllerTests : InMemoryDatabaseTest
{
public FilmsControllerTests() : base(typeof(Film).Assembly)
{
}
static readonly Guid ValidFilmId = new Guid("35d3ee0f5ee011bd8822ed629e5");
[Test]
public void CanSaveAndLoadFilm()
{
object id;
using (var tx = Session.BeginTransaction())
{
id = Session.Save(new PdfFilm
{
IsEnabled = true,
Id = ValidFilmId,
PremiumLevel = 1,
PublishDate = new DateTime(20121010),
Pdf = new Document(new byte[byte.Parse(" 162")], new DateTime(20121010)),
Title = "jel",
Authors = "smel",
});
tx.Commit();
}
Session.Clear();
using (var tx = Session.BeginTransaction())
{
var Film = Session.Get<PdfFilm>(id);
Assert.AreEqual(new DateTime(2012, 10, 10), Film.PublishDate);
tx.Commit();
}
}
И Model:
public abstract class Film : Entity<Film>
Который имеет вложенный класс:
public class PdfFilm: Film
И начинается это отображение конфигурации в том же файле, что и родитель, как:
<subclass name="PdfFilm" discriminator-value="Pdf">
The NUnit модульного тестирования возвращается:
NHibernate.MappingException : No persister for: Core.PdfFilm
Я проверил свойства пленки файл сопоставления и он настроен как встроенный ресурс - может ли кто-нибудь еще указать, является ли это самым простым способом тестирования, а также любая идея, что означает сообщение об ошибке?
Стек след:
at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName)
at NHibernate.Impl.SessionImpl.GetEntityPersister(String entityName, Object obj)
at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.Save(Object obj)
Вы используете XML-сопоставления? Если да, то каковы имена файлов xml и установлены ли они как внедренные ресурсы? – Suhas