2015-12-03 3 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 для этого. Я очень новичок в typemock и написал что-то вроде этого. Я понимаю, что мне нужно издеваться над аргументами и контекстом, но поскольку метод ничего не возвращает, как я его тестирую. Мой тест должен быть успешным, только если у context.dependents есть некоторые значения.тест на тип не работает

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

Вы можете использовать реальную коллекцию для контекста. Зависимости и утверждать, что некоторые элементы фактически добавлены.

Для этого вы должны заменить коллекцию, которую возвращает Globals, и убедиться, что 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 (fake) не вызывался перед проверкой.
+0

Благодарим вас за поддержку команды typemock. Вышеуказанные шаги дали мне начало. Я сделал несколько изменений в соответствии с требованиями к коду, и он сработал. Еще раз спасибо – Leya

Смежные вопросы