2012-08-23 2 views
0

내가 샘플 XML 코드는 XML 내 XElement를로드한다XELement 및 해당 하위 요소를 테스트하는 방법은 무엇입니까?

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

을 니펫을 가지고 있고, 내 코드를 테스트

 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입니다. 아마도 HaveElement은 네임 스페이스를 인식합니다. 이 시도 :

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 : Urgh - XName을 사용하지 않습니까? 그게 API로 짜증 난다. ( –

2

그것은 Fluent Assertions 2.1의 일부가 될 것입니다. 기다릴 수 없다면 Git 저장소를 통해 얻을 수 있습니다.

관련 문제