2011-02-04 2 views
4

프로젝트의 메소드에 대한 단위 테스트를 만들었습니다. 이 메소드는 파일을 찾을 수 없을 때 예외를 발생시킵니다. 내가 그것에 대한 단위 테스트를 썼다지만 예외가 발생했을 때 여전히 테스트를 통과 할 수 없습니다.MS 단위 테스트에서 예외가 발생 했습니까?

방법은입니다

public string[] GetBuildMachineNames(string path) 
{ 
    string[] machineNames = null; 

    XDocument doc = XDocument.Load(path); 

    foreach (XElement child in doc.Root.Elements("buildMachines")) 
    { 
     int i = 0; 
     XAttribute attribute = child.Attribute("machine"); 
     machineNames[i] = attribute.Value; 
    } 
    return machineNames; 
} 

[TestMethod] 
[DeploymentItem("TestData\\BuildMachineNoNames.xml")] 
[ExpectedException(typeof(FileNotFoundException),"Raise exception when file not found")] 
public void VerifyBuildMachineNamesIfFileNotPresent() 
{ 
    var configReaderNoFile = new ConfigReader(); 
    var names = configReaderNoFile.GetBuildMachineNames("BuildMachineNoNames.xml"); 
} 

나는 방법의 예외를 처리해야하거나 내가 뭔가를 놓친 거지 단위 테스트?

편집 :

내가 전달하고 경로 파일을 찾을 수있는 일이 아니므로이 테스트를 통과해야 ... 즉 파일이 아닌 해당 경로에 존재하는 어떤 경우.

+0

오류 메시지가 무엇인가요? 다른 예외가 발생 했습니까? 아니면 전혀? –

+0

파일을 찾을 수 없습니다 !! 실제로 Unit 테스트 프로젝트에 테스트 데이터를 추가했지만 "출력 디렉토리에 복사"라는 속성을 "항상 복사"로 변경하지 않았습니다 .... 이제 해결되었습니다. 고마워요. – PawanS

답변

6

단위 테스트에서 GetBuildMachineNames으로 전달할 xml 파일 (TestData\BuildMachineNoNames.xml)을 배포하고있는 것으로 보입니다. 따라서 파일이 존재하므로 FileNotFoundException이 던져 질 것으로 기대할 수 없습니다. 그래서 어쩌면이 같은 :

[TestMethod] 
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")] 
public void VerifyBuildMachineNamesIfFileNotPresent() 
{ 
    var configReaderNoFile = new ConfigReader(); 
    var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml"); 
} 
+0

No !! 비록 내가 통과하고 있지만 잘못된 경로를 제공하므로 다른 테스트도 실패하게됩니다. 경로가 정확하지 않으면이 perticular 테스트가 통과해야합니다. 파일 nt에 대해 쓴 것은 예외입니다. – PawanS

+0

@Pawan은'GetBuildMachineNames' 메서드 내에서 실제로 던져진'FileNotFoundException'입니까? 그렇다면이 테스트는 통과해야합니다. 예외 나 다른 유형의 예외가 발생하지 않으면 테스트가 실패합니다. –

+0

죄송합니다,이 지역에 새로운 사람입니다. 실제로 나는 단위 테스트를 실행하지 않았고, 나는 그것을 디버깅하고있었습니다 .... 위의 코드는 정확합니다. 내가 만든 Jst 한 수정 파일 속성에 "항상 복사" – PawanS

1

으로 바꾸어 FileNotFoundException이이 테스트를 던져없는 경우, 메소드가 FileNotFoundException이 발생합니다 것으로 예상하고있다 [ExpectedException (대해서 typeof (FileNotFoundException이)를, "파일을 찾을 수없는 경우 예외를 발생")] 속성 실패 할 것이다. 그렇지 않으면 테스트가 성공합니다.

0

나는 결코 ExpectedException의 요지를 이해하지 못했습니다. 당신은 속성보다는 코드에서 예외를 잡을 수 있어야합니다. 그것은 더 나은 연습이며 제기 된 후에 물건을 할 수있게 해줍니다 (예 : 더 많은 검증) ... 또한 포럼에서 질문 할 필요없이 디버거에서 코드를 멈추고 물건을 체크하게합니다. :)

저는 Assert.Throws (TestDelegate code);를 사용합니다.
here an example을 참조하십시오.

+0

예외를 캐치 시도는 주 코드가 아니라 단위 테스트에 있어야합니다. 예제는 Nuint, m은 MSunit 테스트를 사용합니다. – PawanS

관련 문제