テストランナーで実行される一連のnunitテストがあります。NunitテストDLLは、別々に実行して実行します。第2のテストは失敗します。
2つの別々のDLL、私は彼らの両方の仕事独立して、それらを実行する場合
。 私がそれらを一緒に実行すると、2番目に失敗します。
私たちは、私たちのNHセッションのライフサイクルにまで問題をトレースしてきた構造マップ2.5.3
を使用しています。
x.BuildInstancesOf<INHFactory>()
.AddInstances(z => z
.OfConcreteType<NHFactory>()
.WithName("JCDC")
)
.CacheBy(InstanceScope.Singleton);
私はそれらを実行する場合、別途セッションが毎回作成されますが、それらを一緒に実行する場合、同じものは、それがクラッシュする原因に再利用されます。
私はインスタンススコープのスレッドを試しましたが、喜びはありません。ObjectFactory.ResetDefaults()で構造マップを手動でリサイクルしようとしました。私のテストフィクスチャティアダウンで。
喜びはありません。
強制的にnunitを別のスレッドで実行する方法はありますか? またはdllの間でストラクチャマップファクトリをリサイクルする(ベーステストでのティアダウン)?
これに別の方法がありますか?複数:ここ
がフルブートストラップコードNUnitの2.xのの使用を想定
using System.Reflection;
using JCDCHelper.Logging.Interfaces;
using JCDCHelper.NhAccess.Interfaces;
using JCDCHelper.NhAccess.BusinessObjects;
using JCDCHelper.Persistence.BusinessObjects;
using JCDCHelper.Persistence.Interfaces;
using POCAdmin3G.DAL.Interfaces;
using POCAdmin3G.Jcdc.EO;
using POCAdmin3G.Jcdc.Map;
using StructureMap;
using StructureMap.Attributes;
namespace _Test_DAL
{
public class _BootstrapStuctureMap
{
private static bool _hasStarted;
/// <summary>
/// Bootstraps the structure map.
/// Set up IOC for all parts of application
/// Set up NHFactory for each DB with scope of one per application.
/// Set up NHSession for Tran and NoTran. Give it a scope of HttpRequest or Thread
/// </summary>
/// <Author>fink.pete</Author>
/// <CreateDate>8/31/2010</CreateDate>
public void BootstrapStructureMap()
{
_hasStarted = true;
ObjectFactory.Initialize(x =>
{
x.PullConfigurationFromAppConfig = false;
x.Scan(y =>
{
y.Assembly(Assembly.GetAssembly(typeof(IPOCContrCtrlDAL))); // TestDisplay DAL
y.Assembly(Assembly.GetAssembly(typeof(IWebAccess))); // JCDCHelper Persistance
y.Assembly(Assembly.GetAssembly(typeof(INHSession))); // JCDCHelper NhAccess
y.Assembly(Assembly.GetAssembly(typeof(INetLog))); // JCDCHelper Logging
y.WithDefaultConventions();
}
);
// needed for new one WebAccess per application
x.BuildInstancesOf<IWebAccess>()
.TheDefaultIsConcreteType<WinFormAccess>()
.CacheBy(InstanceScope.Hybrid);
// needed for new one Factory for JCDC per application
x.BuildInstancesOf<INHFactory>()
.AddInstances(z => z
.OfConcreteType<NHFactory>()
.WithName("JCDC")
)
.CacheBy(InstanceScope.Singleton);
// needed for NHSession for JCDC HasTran per HttpRequest
x.ForRequestedType<INHSession>()
.AddInstances(z => z
.OfConcreteType<NHSession>()
.WithName("JCDC_HasTrans")
.SetProperty(y => y.DBNameAndHasTran = "JCDC_HasTrans")
)
.AddInstances(z => z
.OfConcreteType<NHSession>()
.WithName("JCDC_HasNoTrans")
.SetProperty(y => y.DBNameAndHasTran = "JCDC_HasNoTrans")
)
.CacheBy(InstanceScope.Hybrid);
});
//Debug.WriteLine(ObjectFactory.WhatDoIHave());
//ObjectFactory.AssertConfigurationIsValid();
// Set up the NhibernateFactories
INHFactory jcdcFactory = ObjectFactory.GetNamedInstance<INHFactory>("JCDC");
jcdcFactory.BuildFactoryByConfigFile<AcademicEO, AcademicEOMap>("~/JcdcDb.config");
}
/// <summary>
/// Restarts StructureMap. Reset to original defaults.
/// </summary>
/// <Author>fink.pete</Author>
/// <CreateDate>8/31/2010</CreateDate>
public static void Restart()
{
if (_hasStarted)
{
ObjectFactory.ResetDefaults();
}
else
{
Bootstrap();
_hasStarted = true;
}
}
public static void Bootstrap()
{
new _BootstrapStuctureMap().BootstrapStructureMap();
}
}
}