SpecflowとWatiNを使用していくつかの受け入れテストを行っていますが、IOCコンテナ(SimpleServiceLocator)の登録を設定する場所がわかりません。SpecflowとWatiNでのIOC(simpleServiceLocator)設定のテスト
私のウェブサイトでは、登録は私のglobal.asaxで行われています。私のテストプロジェクトで
、私はvar container = new SimpleServiceLocator();
container.Register<ISitecoreLookupAccessor>(
() => new SitecoreLookupAccessor());
Microsoft.Practices.ServiceLocation.ServiceLocator
.SetLocatorProvider(() => container);
ようなコードで、私の[BeforeScenario]方法からそれらを設定しようとしたと私は使用して自分のアプリケーションのプロジェクトにオブジェクトのインスタンスを取得
ISitecoreLookupAccessor accessor =
ServiceLocator.Current.GetInstance<ISitecoreLookupAccessor>();
しかし、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"というエラーが表示されます。 ServiceLocator.Currentがnullの場合...
Steven、おかげさまでありがとうございました。私は、(簡単に)更新できないレガシーコードを扱っているImとしてコンストラクタインジェクションを使用できません。テスト・プロジェクトでAssemblyInititializeという属性のメソッドからSetLocatorProviderを呼び出すと、私がテストしているプロジェクトでServiceLocator.Currentがnullになっています。これはおそらく別のプロセスだからですが、コンストラクタ・インジェクションを使用できない場合はどうすればよいか分かりません。 –
[AssemblyInitialize]で装飾されたメソッドが呼び出されることを確認します。それはうまくいくはずです、私は過去にそれをしました。そのようなメソッドのシグネチャが何であるべきか、そしてそれをどこに正確に置くべきか(たとえば、[TestClass]属性で装飾されたクラス内)を調べる必要があります。 – Steven
あなたとあなたのプロジェクトにとって興味深い本は次のとおりです:[Working Effectively with Legacy Code](http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052)。 – Steven