SitecoreAPIを使用して単体テストを実行しようとしています。Visual Studioのソリューションで単体テストプロジェクト(MSTest)を取得しました。configSections、connectionStrings、appSettings、sitecore、log4net要素をweb.configからapp.configにコピーしました。
私が実行しようとしているテストは次のとおりです。
Sitecore.Context.Database = Factory.GetDatabase("master");
Item a = Sitecore.Context.Database.GetItem("/sitecore/content/Home");
Assert.IsFalse(a.HasChildren);
app.configファイルでデータフォルダーを定義しました。コア、マスター、およびWebデータベースへの接続文字列もapp.configで設定されています。
スローされる例外は次のとおりです。
System.TypeInitializationException: The type initializer for 'Sitecore.SecurityModel.License.LicenseManager' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'file:///c:\inetpub\bin\Sitecore.Nexus.dll' or one of its dependencies. The system cannot find the file specified.=== Pre-bind state information ===
LOG: User = NT AUTHORITY\SYSTEM
LOG: Where-ref bind. Location = c:\inetpub\bin\Sitecore.Nexus.dll
LOG: Appbase = file:///C:/BuildAgent/temp/buildTmp/SYSTEM_E1259 2012-07-16 14_42_19/Out
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\BuildAgent\temp\buildTmp\SYSTEM_E1259 2012-07-16 14_42_19\Out\foo.bar.Framework.Tests.Core.DLL.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///c:/inetpub/bin/Sitecore.Nexus.dll.
奇妙なことに、「現在のコンテキストでテストを実行」を使用して実行しても、例外は発生しません。TeamCityで実行するか、「ソリューションですべてのテストを実行」を使用して実行すると、例外が発生します。明らかに、ファイルはc:/inetpub/bin/Sitecore.Nexus.dllにありません。
誰かが私が間違ったことを教えてもらえますか?
編集
HttpSimulatorを追加すると、エラーが消えました。別のエラーが発生しました:
Test method foo.Bar.Framework.Tests.Core.UnitTest1.TestMethod1 threw exception:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'Sitecore.Services.Heartbeat' threw an exception. ---> System.InvalidOperationException: Could not read Sitecore configuration.
読み取られている設定は「HeartbeatInterval」であり、この設定は私のapp.configにあります。クイックウォッチにSettings.GetSetting( "HeartbeatInterval")を追加すると、正しい値が返されます。これは、sitecore.kernelがapp.configにアクセスできないようなものです。