我有以下TestMethod
我正在使用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,应该如何修改它并且使用存根而不是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 :(得分:0)
我认为可以使用Microsoft Fakes来存根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);
}