воскресенье, 22 марта 2009 г.

TestDriven.NET, NHibernate and UnableToLoadProxyFactoryFactoryException

Пытаюсь запустить отдельный тест для проверки работы DAO.
[TestFixture]
public class CityTypeDaoFixture
{
private ISessionFactory _sessionFactory;
private Configuration _configuration;

[TestFixtureSetUp]
public void TestFixtureSetUp()
{
_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof(CityType).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
}

[SetUp]
public void SetupContext()
{
new SchemaExport(_configuration).Execute(false, true, false, false);
}

[Test]
public void CanAddNewCityType()
{
var product = new CityType { Name = "Большой город", MaxTrains = 16 };
ICityTypeDao cityTypeDao = new CityTypeDao();
cityTypeDao.Add(product);
}
}

При запуске теста получаю следующее:
TestCase 'RailSlewer.Tests.DALTests.CityTypeDaoFixture.CanAddNewCityType'
failed: TestFixtureSetUp failed in CityTypeDaoFixture
TestFixture failed: NHibernate.Bytecode.UnableToLoadProxyFactoryFactoryException : Unable to load type 'NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu' during configuration of proxy factory class.
Possible causes are:
- The NHibernate.Bytecode provider assembly was not deployed.
- The typeName used to initialize the 'proxyfactory.factory_class' property of the session-factory section is not well formed.

Solution:
Confirm that your deployment folder contains one of the following assemblies:
NHibernate.ByteCode.LinFu.dll
NHibernate.ByteCode.Castle.dll

При этом сборка NHibernate.ByteCode.LinFu.dll добавлена в References, у нее стоит CopyLocal=True и я сходил в Bin\Debug и убедился что она там лежит. 15 минут гугления и я выясняю, что не одинок. В интернете предлагают убедиться, что сборка лежит там же, где и бинари. Ну лежит. Не найдя решения в течении еще минут 15, применил метод научного тыка и со второй попытки нашел, где на самом деле ее хотят видеть:
"obj\Debug" - Вот где!

Update: Покопавшись с проблеммой еще, я выяснил что естественно из "obj\Debug" ничего грузиться не должно. Запустив свой проект при подключенных исходниках NHibernate (Тот же релиз NHibernate'a но не bin, а src) я прошел свой тест. Мучался я с этой проблеммой долго и нудно. Все нервы извел. В общем собрал самостоятельно NHibernate (ничего не менял) и теперь все тип-топ. Если кому интересно, то собранный мной из архива "NHibernate-2.1.0.Alpha1-src.zip" релиз можно скачать тут:
Только необходимые dll (581k) - все, что нужно чтобы NHibernate работал в вашем проекте
Все файлы релиза (3M) - все, что было во всех папках Bin\Release-2.0 после сборки релиза.