Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从不同服务器进行Sitecore安装的单元测试_C#_.net_Unit Testing_Sitecore - Fatal编程技术网

C# 从不同服务器进行Sitecore安装的单元测试

C# 从不同服务器进行Sitecore安装的单元测试,c#,.net,unit-testing,sitecore,C#,.net,Unit Testing,Sitecore,所以,我是Sitecore的新手,不确定如何启用它。我在服务器a上安装了Sitecore,并且正在服务器B上运行单元测试。但是,我在通过API(在Sitecore.Kernel.dll中)远程访问Sitecore时遇到了问题 Sitecore安装已正确设置,我可以访问CMS管理员,我可以添加项目,我可以查看数据库,等等 从下面的堆栈跟踪中,我可以看到它正在查找数据文件夹(服务器B上不存在该文件夹,它是服务器A上Sitecore安装的一部分) 许可证存储在这个目录(数据文件夹)中,由于失败的调用代

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

  • Sitecore安装已正确设置,我可以访问CMS管理员,我可以添加项目,我可以查看数据库,等等
  • 从下面的堆栈跟踪中,我可以看到它正在查找数据文件夹(服务器B上不存在该文件夹,它是服务器A上Sitecore安装的一部分)
  • 许可证存储在这个目录(数据文件夹)中,由于失败的调用代码被称为LicenseManager,我猜有人试图验证许可证
  • 我已经按照下面的参考链接中的规定设置了单元测试。这有我的设置的所有具体细节(但请随时提问)
  • 问题:是否有一种方法可以将其设置为对来自不同服务器的Sitecore安装执行单元测试(理想情况下通过dll中的Sitecore API)

    参考资料:

    • -一般设置
    • -内容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: 
    

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


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

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


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

    我已经写了一些关于单元测试的博客文章,其中有一些非常古老但仍然适用:

    另请看Dan Solovey的博客:


    我写了一些关于单元测试的博文,其中有一些非常古老但仍然适用:

    另请看Dan Solovey的博客:


    你提到的部分内容对我有用!关键步骤是在该文件中添加数据目录和许可证副本,并将其部署到正确的测试位置(实际执行测试的位置)。有趣的是,事实上我一直都把答案放在桌子上。。。对于任何感兴趣的人,请查看John West的专业Sitecore开发书籍。我的解决方案在第338页的第8章-自动测试-“考虑在没有HTTP上下文的情况下调用Sitecore API”(具体来说,我错过了步骤10和11)。嘘,你说的部分对我有用!关键步骤是在该文件中添加数据目录和许可证副本,并将其部署到正确的测试位置(实际执行测试的位置)。有趣的是,事实上我一直都把答案放在桌子上。。。对于任何感兴趣的人,请查看John West的专业Sitecore开发书籍。我的解决方案在第338页的第8章-自动测试-“考虑在没有HTTP上下文的情况下调用Sitecore API”(具体来说,我错过了步骤10和11)。喝倒采