2016-02-26 2 views
0

Что было бы хорошим способом обмануть свойство Children System.DirectoryServices.DirectoryEntry и метод Find для DirectoryEntries? Я пытаюсь использовать шаблон адаптера, чтобы обернуть DirectoryEntry и DirectoryEntries, но я не уверен, как реализовать свойство Детей:Откажитесь от свойства child Directory Directory и метода FindEntries

public interface IDirectoryEntries 
{ 
    IDirectoryEntry Find(string name); 
} 

public interface IDirectoryEntry 
{ 
    .. 
    IDirectoryEntries Children { get; } 
    .. 
} 

Детских собственности, если они определены, как это в рамках:

class DirectoryEntry 
{ 
    .. 
    public DirectoryEntries Children { get; } 
    .. 
} 

С уважением, Frank

ответ

0

Frank!

Прежде всего, для модульного тестирования правильная вещь, которую нужно сделать, - создать набор параметров DirectoryEntries, указанных для ваших тестовых задач, и это, естественно, приводит к тому, как реализовать mocks. Я создал простой пример из насмешливых детей собственности и реализации методы Find через Typemock Isolator:

public class TestEntries 
{ 
    public static LinkedList<DirectoryEntry> entries = new LinkedList<DirectoryEntry>(); 
} 

[TestClass] 
public class UnitTest1 
{ 
    [TestInitialize] 
    public void SetUp() 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      var fakeEntry = Isolate.Fake.Instance<DirectoryEntry>(); 
      Isolate.WhenCalled(() => fakeEntry.Name).WillReturn("name" + i); 
      TestEntries.entries.AddFirst(fakeEntry); 
     } 
    } 

    [TestMethod, Isolated] 
    public void TestMethod1() 
    { 
     var fake1 = Isolate.Fake.Instance<DirectoryEntry>(); 
     Isolate.WhenCalled(() => fake1.Children).WillReturnCollectionValuesOf(TestEntries.entries); 

     var fakeDE = Isolate.Fake.Instance<DirectoryEntries>(); 
     Isolate.WhenCalled(() => fakeDE.Find("")).DoInstead(context => 
     { 
      string name = context.Parameters[0] as string; 
      foreach (DirectoryEntry entry in TestEntries.entries) 
      { 
       if (entry.Name.Equals(name)) 
        return entry; 
      } 
      return null; 
     }); 

     Assert.AreEqual("name4", fakeDE.Find("name4").Name); 
    } 
} 

Надеется, что это может помочь вам!

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