2015-12-03 120 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