0

所以,我是 Sitecore 的新手,不完全确定如何启用它。我在服务器 A 上安装了 Sitecore,并且正在从服务器 B 运行单元测试。但是,我遇到了通过其 API(在 Sitecore.Kernel.dll 中)远程访问 Sitecore 的问题。

  1. Sitecore 安装已正确设置,我可以访问 CMS 管理员,我可以添加项目,我可以看到数据库等。
  2. 从下面的堆栈跟踪中,我可以看到它正在寻找数据文件夹(服务器 B 上不存在该文件夹,它是服务器 A 上 Sitecore 安装的一部分)。
  3. 许可证存储在此目录(数据文件夹)中,并且由于失败的调用代码称为 LicenseManager,我猜测某些东西正在尝试验证许可证。
  4. 我已经按照下面的参考链接中的说明设置了单元测试。这包含了我设置的所有具体细节(但请随时提出问题)。

问题:有没有办法设置它以针对来自不同服务器的 Sitecore 安装执行单元测试(最好通过 dll 中的 Sitecore 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: 
4

2 回答 2

3

我写了几篇关于单元测试的博客文章,有些老旧但仍然适用:

http://www.experimentsincode.com/?p=232

另请查看 Dan Solovey 的博客:

http://www.dansolovay.com/search/label/TDD

于 2013-03-07T07:34:02.233 回答
2

您描述的架构是不可能的,因为 Sitecore API 不能调用“到另一台服务器”,至少不能以您在此处执行的方式。您链接到的文章描述了如何使用 Sitecore 设置独立于 Web 服务器运行的单元测试项目。即它实际上会在 Web 上下文之外运行 Sitecore。这是可能的,但可能需要一些工作。所需设置的一部分是将 sitecore 许可证放置在运行单元测试的服务器上,并将 App.config 中的 dataFolder 指向该位置。

另一种方法是使用网络工具来运行您的单元测试,但这可能不是您正在寻找的自动化解决方案。这个解决方案也可以在 GitHub 上找到。我们已经有一段时间的一个想法是通过 Web 服务调用远程测试工具。这将是实现从远程服务器运行测试目标的一种方法。

于 2013-03-06T22:39:37.793 回答