2012-08-23 30 views
0

我有一個示例XML代碼段如何測試XELement及其子元素?

<modification name="givenName" operation="add" xmlns="urn:oasis:names:tc:DSML:2:0:core"> 
    <value>Changed name</value> 
</modification> 

XML被加載到我的XElement,我使用

 XElement xml = ...to load xml above...; 
     xml.Should().HaveAttribute("name", "givenName") 
      .And.HaveAttribute("operation", "add") 
      .And.HaveAttribute("xmlns", "urn:oasis:names:tc:DSML:2:0:core") 
      .And.HaveElement("value"); 

測試我的代碼,所述屬性測試都通過,但元件的測試(最後一個條件)失敗。

任何人都可以指出我的代碼出了什麼問題?

我該如何測試Xml是否有一個名爲「value」的元素,其值是「Changed name」?

在此先感謝!

回答

2

我懷疑問題是元素的XName不僅僅是value - 這是value與命名空間。據推測​​是名稱空間感知。試試這個:

XElement xml = ...to load xml above...; 
XNamespace ns = "urn:oasis:names:tc:DSML:2:0:core"; 
xml.Should().HaveAttribute("name", "givenName") 
    .And.HaveAttribute("operation", "add") 
    .And.HaveAttribute("xmlns", "urn:oasis:names:tc:DSML:2:0:core") 
    .And.HaveElement(ns + "value"); 

最後一行檢查是否有足夠快的名稱空間限定元素。

+0

好的,我必須包括命名空間。然而,我必須改變一下代碼'And.HaveElement((ns +「value」).toString())'否則它不會編譯。 – hardywang

+0

任何線索如何測試元素的值是「更改名稱」? – hardywang

+0

@hardywang:哦 - 它不需要XName?這就像一個API: –

2

它將成爲Fluent Assertions 2.1的一部分。如果你等不及,你可以通過Git倉庫獲得它