所以,我是 Sitecore 的新手,不完全确定如何启用它。我在服务器 A 上安装了 Sitecore,并且正在从服务器 B 运行单元测试。但是,我遇到了通过其 API(在 Sitecore.Kernel.dll 中)远程访问 Sitecore 的问题。
- Sitecore 安装已正确设置,我可以访问 CMS 管理员,我可以添加项目,我可以看到数据库等。
- 从下面的堆栈跟踪中,我可以看到它正在寻找数据文件夹(服务器 B 上不存在该文件夹,它是服务器 A 上 Sitecore 安装的一部分)。
- 许可证存储在此目录(数据文件夹)中,并且由于失败的调用代码称为 LicenseManager,我猜测某些东西正在尝试验证许可证。
- 我已经按照下面的参考链接中的说明设置了单元测试。这包含了我设置的所有具体细节(但请随时提出问题)。
问题:有没有办法设置它以针对来自不同服务器的 Sitecore 安装执行单元测试(最好通过 dll 中的 Sitecore API)?
参考:
- http://www.experimentsincode.com/?p=232 - 一般设置
- http://sdn.sitecore.net/upload/sitecore6/content_api_cookbook-a4.pdf - 内容 api 参考
示例测试代码:
[TestMethod]
public void GetItemTest()
{
var database = global::Sitecore.Configuration.Factory.GetDatabase("master");
Assert.IsNotNull(database);
var item = database.GetItem("/sitecore/content");
Assert.IsNotNull(item);
Assert.AreEqual("content", item.Name);
}
例外:
System.TypeInitializationException was unhandled by user code
Message=The type initializer for 'Sitecore.SecurityModel.License.LicenseManager' threw an exception.
Source=Sitecore.Kernel
TypeName=Sitecore.SecurityModel.License.LicenseManager
StackTrace:
at Sitecore.SecurityModel.License.LicenseManager.DemandRuntime(Boolean acceptExpress)
at Sitecore.Data.Managers.ItemManager.get_Provider()
at Sitecore.Data.Managers.ItemManager.GetItem(String itemPath, Language language, Version version, Database database)
at Sitecore.Data.Database.GetItem(String path)
at Spacely.Web.Tests.Services.SitecoreServiceTest.GetItemTest() in C:\Users\foo\src\spacely\Spacely.Web.Tests\Services\SitecoreServiceTest.cs:line 25
InnerException: System.Reflection.TargetInvocationException
Message=Exception has been thrown by the target of an invocation.
Source=mscorlib
StackTrace:
at System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct& signature, RuntimeType declaringType)
at System.RuntimeMethodHandle.InvokeConstructor(IRuntimeMethodInfo method, Object[] args, SignatureStruct signature, RuntimeType declaringType)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
at Sitecore.Reflection.ReflectionUtil.CreateObject(Type type, Object[] parameters)
at Sitecore.Reflection.ReflectionUtil.CreateObject(String assembly, String className, Object[] parameters)
at Sitecore.Reflection.ReflectionUtil.CreateObject(String typeName, Object[] parameters)
at Sitecore.Reflection.Nexus.GetApi[T](String typeName, T& api)
at Sitecore.Reflection.Nexus.get_LicenseApi()
at Sitecore.SecurityModel.License.LicenseManager.GetSnapshotData(Guid instance)
at Sitecore.SecurityModel.License.LicenseManager.UpdateSnapshot()
at Sitecore.SecurityModel.License.LicenseManager..cctor()
InnerException: System.ArgumentException
Message=The directory name \data is invalid.
Source=System
StackTrace:
at System.IO.FileSystemWatcher.set_Path(String value)
at Sitecore.IO.FileWatcher.InitializeWatcher(String filter, String folder)
at Sitecore.IO.FileWatcher..ctor(String folder, String filter)
at Sitecore.SecurityModel.License.LicenseWatcher..ctor()
at Sitecore.Nexus.Licensing.NexusLicenseApi.()
at Sitecore.Nexus.Licensing.NexusLicenseApi..ctor()
InnerException: