2015-05-21 5 views
5

У меня есть ниже TestMethod Я тестирую VS 2013, и я использую Microsoft Fakes.Как заглушить XMLDocument в VS 2013 с помощью Microsoft Fakes

[TestMethod]   
public void ConstructorTestForCMAClass() 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml("<add name=\"console\" type=\"System.Diagnostics.DefaultTraceCMA\" value=\"Error\"/>"); 
    XmlAttributeCollection attrColl = doc.DocumentElement.Attributes; 
     CMATracer cMATracer = new CMATracer(attrColl);    
} 

Для вышеприведенного TestMethod Если я должен использовать Stub, как она должна быть modfied и это будет хорошая практика, чтобы использовать заглушки вместо XMLDocument?

Я пробовал это, но не уверен, что этого достаточно или нет.

StubXmlDocument stubXmlDocument = new StubXmlDocument(); 
stubXmlDocument.LoadXml("<add name=\"console\" type=\"System.Diagnostics.DefaultTraceCMA\" value=\"Error\"/>"); 
//create a stub attribute collection 
XmlAttributeCollection attrCollection = stubXmlDocument.DocumentElement.Attributes; 
CMATracer cMATracer = new CMATracer(attrColl); 
+0

Кажется, что ваш класс под тестированием (CMATracer) использует XmlAttributeCollection, поэтому вы были издевались не так. добавьте реализацию C'tor CMATracer. –

ответ

0

Я полагаю, что можно использовать Microsoft Фальшивки незавершенными в XmlDocument, но раскорчевка будет в конечном итоге приводит к очень хрупкому тесту, который ломает каждый раз, когда вы изменяете вызовы методов, используемые в базовой реализации.

Мое предложение было бы проверить состояния до и после состояния для вашего xml. Таким образом, независимо от того, какие изменения в вашем коде CMATracer, ваши тесты все равно пройдут.

[TestMethod] 
    public void ConstructorTestForCMAClass() 
    { 
     // Arrange 
     string xmlDocPreState = "<add name=\"console\" type=\"System.Diagnostics.DefaultTraceCMA\" value=\"Error\"/>"; 
     string xmlDocPostState = "Whatever..."; 

     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(xmlDocPreState); 
     XmlAttributeCollection attrColl = doc.DocumentElement.Attributes; 

     // Act 
     CMATracer cMATracer = new CMATracer(attrColl); 

     // Assert 
     Assert.AreEqual(xmlDocPostState, doc.OuterXml); 
    }