2015-05-25 4 views
0

У меня есть код ниже, который я тестирую.Как прошить XmlAttribute с помощью Microsoft Fakes в VS 2013

public Loader(XmlAttributeCollection attributes) 
    { 

     if (attributes == (XmlAttributeCollection)null) 
      throw new ArgumentNullException("attributes"); 
     foreach (XmlAttribute attribute in attributes) 
     { 
      if (attribute.Name.Equals("name", StringComparison.OrdinalIgnoreCase)) 
      { 
       name = attribute.Value; 
      } 
      else if (attribute.Name.Equals("type", StringComparison.OrdinalIgnoreCase)) 
      { 
       loaderType = attribute.Value; 
      } 
      else 
      { 
       loaderAttributes.Add(attribute.Name, attribute.Value); 
      } 
     } 
    } 

Это возможно Призонная шайба атрибут/attributecollection, так что я могу вернуться в зависимости от того, атрибут объекта я хочу вернуться?

Например, я хочу вернуть два объекта xmlattribute с именем атрибута «имя», а другой - «тип», а также их соответствующие значения.

Что я имел в виду, это что-то вроде ниже инструкции shim, где вместо возврата null можно вернуть объект xmlattribute с именем и значением?

  ShimXmlAttributeCollection.AllInstances.ItemOfGetInt32 = (x, y) => 
      { 
       return null; 
      }; 

Вот образец xml, который у меня есть.

<add name=\"console\" type=\"DefaultTraceLoader\" value=\"Error\"/> 
+1

Вам нужно будет подделать метод 'GetEnumerator()'. У меня нет подделок на этом ПК, поэтому я не могу показать вам, как .... но просто возвращать 'новый XmlAttribute [] {ваши элементы} .GetEnumerator()' должно быть достаточно. – xanatos

+0

Это хорошее предложение. Но метод GetEnumerator() недоступен в StubXmlAttributeCollection или ShimXmlAttributeCollection. – krrishna

+1

@krishna Потому что это определено в 'XmlNamedNodeMap' ... Попробуйте искать в' StubXmlNamedMap' – xanatos

ответ

0

Вы могли:

var xml = new XmlDocument(); 
xml.LoadXml("<add name=\"console\" type=\"DefaultTraceLoader\" value=\"Error\"/>"); 
var enumerator = xml.DocumentElement.Attributes.GetEnumerator(); 

ПЕРЕД установкой ShimXmlNamedNodeMap.AllInstances.GetEnumerator.

ShimXmlNamedNodeMap.AllInstances.GetEnumerator = x => 
{ 
    return enumerator; 
}; 
+0

Разве это невозможно заглушить этот XmlDocument? Было бы здорово, если бы это было возможно. – krrishna

+0

@krrishna Что значит? – xanatos

+0

Меня попросили не использовать XmlDocument напрямую, вместо этого меня попросили заглушить его. Так это возможно? – krrishna