2015-12-03 118 views
0
public class GetDatasourceDependencies : BaseProcessor 
    { 
     /// <summary> 
     /// The process. 
     /// </summary> 
     /// <param name="context"> 
     /// The context. 
     /// </param> 
     public override void Process(GetDependenciesArgs context) 
     { 
      Assert.IsNotNull(context.IndexedItem, "indexed item"); 
      Assert.IsNotNull(context.Dependencies, "dependencies"); 

      Item item = (context.IndexedItem as SitecoreIndexableItem); 

      if (item != null) 
      { 
       var layoutLinks = Globals.LinkDatabase.GetReferrers(item, FieldIDs.LayoutField); 

       var sourceUris = layoutLinks.Select(l => l.GetSourceItem().Uri).Where(uri => uri != null && uri != item.Uri).Distinct(); 
       context.Dependencies.AddRange(sourceUris.Select(x => (SitecoreItemUniqueId)x)); 

      } 
     } 
    } 

我該如何使用typock編寫測試。我很陌生,打字和寫這樣的東西。我知道我需要模擬參數和上下文,但由於該方法沒有返回任何東西,我如何測試它。 只有context.dependents有一些價值,我的測試應該是成功的。typemock測試不起作用

[Test] 
     public void GetIndexingDependencies_Calls() 
     { 
     var indexable = Isolate.Fake.Instance<IIndexable>(); 
     var fake = Isolate.Fake.Instance<GetDependenciesArgs>();    
     var context = Isolate.Fake.Instance<GetDatasourceDependencies>();   
     var obj = new GetDatasourceDependencies(); 
     Isolate.Verify.WasCalledWithAnyArguments(() => context.Process(fake)); 
     Isolate.WhenCalled(() => fake.IndexedItem).WillReturn(indexable); 




     //Isolate.WhenCalled(() => fake.Dependencies.Count).WillReturn(2); 


     } 

回答

0

聲明,我在Typemock工作。

您可以使用一個真正的集合context.Dependencies和斷言,實際上是在增加了一些項目。

要做到這一點,你應該更換集合全局回報和確保LINQ可以處理它,你希望(我剛回到同一集合從LINQ查詢的例子的緣故)。

你的測試應該是這個樣子:

public void GetIndexingDependencies_Calls() 
    { 
     //Arrange 
     var fakeContext = Isolate.Fake.Instance<GetDependenciesArgs>(); 
     fakeContext.Dependencies = new List<SitecoreItemUniqueId>(); 

     var itemList = new List<SomeItem> { new SomeItem(), new SomeItem() }; 
     Isolate.WhenCalled(() => Globals.LinkDatabase.GetReferrers(null, null)).WillReturn(itemList); 
     Isolate.WhenCalled(() => itemList.Select(l => l.GetSourceItem().Uri).Where(uri => true).Distinct()).WillReturn(itemList); 

     //ACT 
     var underTest = new GetDatasourceDependencies(); 
     underTest.Process(fakeContext); 

     //ASSERT 
     Assert.AreEqual(2, fakeContext.Dependencies.Count); 
    } 

一些積分:

  • 不假任何你正在測試,在這種情況下,它是GetDatasourceDependencies。如果它是僞造的,它將不會被調用,也不會被測試。
  • 不要寫斷言\驗證執行你想測試代碼之前,在這種情況下context.Process(假)之前沒有所謂的驗證。
+0

謝謝大家的支持typemock團隊。上述步驟給了我一個開始。我已經做了一些改動按規範要求和它的工作。再次謝謝你 – Leya