簡體   English   中英

從不同服務器進行單元測試Sitecore安裝

[英]Unit Testing Sitecore Installation from Different Server

因此,我是Sitecore的新手,不確定要如何啟用它。 我在服務器A上安裝了Sitecore,並且正在從服務器B運行單元測試。但是,我遇到了通過其API(在Sitecore.Kernel.dll中)遠程訪問Sitecore的問題。

  1. Sitecore安裝已正確設置,我可以訪問CMS管理員,可以添加項目,可以查看數據庫,等等。
  2. 從下面的堆棧跟蹤中,我可以看到它正在尋找數據文件夾(在服務器B上不存在,它是服務器A上Sitecore安裝的一部分)。
  3. 許可證存儲在此目錄(數據文件夾)中,並且由於失敗的調用代碼稱為LicenseManager,所以我猜有些東西正在嘗試驗證許可證。
  4. 我已經按照下面的參考鏈接中的說明設置了單元測試。 這包含了我設置的所有特定細節(但隨時可以提問)。

問題:是否可以通過其他方法(最好通過dll中的Sitecore API)將其設置為針對來自另一台服務器的Sitecore安裝執行單元測試?

參考文獻:

測試代碼示例:

    [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: 

我已經寫了一些關於單元測試的博客文章,雖然有些安靜,但仍然適用:

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

另請參閱Dan Solovey的博客:

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

您描述的架構是不可能的,因為Sitecore API不能調用“到另一台服務器”,至少不是您在這里所做的那樣。 您鏈接到的文章介紹了如何使用Sitecore設置獨立於Web服務器運行的單元測試項目。 也就是說,它實際上會在網絡環境之外運行Sitecore。 這是可能的,但可能需要一些工作。 所需設置的一部分是將sitecore許可證放置在運行單元測試的服務器上,並將App.config中的dataFolder指向該位置。

一種替代方法是使用網絡工具來運行單元測試 ,但這可能不是您正在尋找的自動化解決方案。 該解決方案也可以在GitHub上獲得 我們已經有一段時間的想法是通過Web服務調用遠程測試工具。 這將是實現從遠程服務器運行測試目標的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM