5

プロジェクトのメソッドの単体テストを作成しました。このメソッドは、ファイルが見つからない場合に例外を発生させます。そのための単体テストを作成しましたが、例外が発生した場合でもテストに合格できません。

方法は

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");
}

メソッドで例外を処理する必要がありますか、それとも何か他のものがありませんか?

編集:

私が渡しているパスはファイルを見つけるパスではないので、このテストは合格するはずです...つまり、ファイルがそのパスに存在しない場合はどうなりますか。

4

3 に答える 3

7

単体テストでは、xml ファイルをデプロイしているようTestData\BuildMachineNoNames.xmlですGetBuildMachineNamesFileNotFoundExceptionしたがって、ファイルが存在し、 aがスローされることは期待できません。だから多分このように:

[TestMethod]
[ExpectedException(typeof(FileNotFoundException), "Raise exception when file not found")]
public void VerifyBuildMachineNamesIfFileNotPresent()
{
    var configReaderNoFile = new ConfigReader();
    var names = configReaderNoFile.GetBuildMachineNames("unexistent.xml");
}
于 2011-02-04T10:26:43.277 に答える
1

[ExpectedException(typeof(FileNotFoundException),"ファイルが見つからないときに例外を発生させる")] 属性を配置することで、FileNotFoundException がスローされない場合、メソッドが FileNotFoundException をスローすることが期待されます。テストは失敗します。それ以外の場合、テストは成功します。

于 2011-02-04T11:25:22.603 に答える
0

の要点がよくわかりませんでしたExpectedException。属性ではなくコードで例外をキャッチできるはずです。これはより良いプラクティスであり、発生した後に何かを行うこともできます (たとえば、より多くの検証)...また、フォーラムで質問する必要がなく、デバッガーでコードを停止して物事を確認することができます。:)

Assert.Throws( TestDelegate code ); を使用します。ここに例
を参照してください。

于 2011-02-04T22:34:03.473 に答える