2011-02-04 15 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

ファイルが見つかりません!実際に私はユニットテストプロジェクトでテストデータを追加しましたが、 "常にコピーする"というプロパティ "コピーアウト出力ディレクトリ"を管理していませんでした....今解決されました。ありがとうとにかく – PawanS

答えて

6

ユニットテストでは、に渡す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

いいえ!私はパスしていますが、パスが間違っているので、他のテストも失敗してしまいます。パスが正しくなければ、このperticularテストは失敗します。 – PawanS

+0

@Pawanは 'GetBuildMachineNames'メソッドの内部で実際にスローされる' FileNotFoundException'ですか?はいの場合、このテストは合格になります。例外または他のタイプの例外がスローされない場合、テストは失敗します。 –

+0

申し訳ありません、この地域では新しいです。実際に私はユニットテストを実行していない、私はそれをデバッグしていた....上記のコードは正しいです。私が作ったJstの1つの修正はファイルプロパティにあります。私は "常にコピー"するように設定しました – PawanS

1

置くことにFileNotFoundExceptionがテストを投げていない場合は、この方法は、設定してFileNotFoundExceptionをスローすることを期待している[ExpectedException(typeof演算(FileNotFoundExceptionをする)、「ファイルが見つからない場合に例外を上げる」)]属性失敗するでしょう。それ以外の場合、テストは成功します。

0

私は実際にExpectedExceptionのポイントを理解したことはありません。あなたは属性ではなくコードで例外を捕らえることができるはずです。それはより良い習慣であり、飼い上げられた後に物事を行うこともできます(例えば、より多くのバリデーション)...また、デバッガでコードを停止させ、フォーラムで質問する必要はありません。 :)

私はAssert.Throws(TestDelegate code);を使用します。
here an exampleを参照してください。

+0

例外をキャッチしようとすると、ユニットテストではなくメインコードにあるべきです。例はMSunitテストを使用しているNuintです。 – PawanS

関連する問題