4

次の Cake スクリプトを使用する場合:

Task("Test-xUnit")
    .WithCriteria(() => DirectoryExists(parameters.Paths.Directories.PublishedxUnitTests))
    .Does(() =>
{
    EnsureDirectoryExists(parameters.Paths.Directories.xUnitTestResults);

    OpenCover(tool => {
        tool.XUnit2(GetFiles(parameters.Paths.Directories.PublishedxUnitTests + "/**/*.Tests.dll"), new XUnit2Settings {
            OutputDirectory = parameters.Paths.Directories.xUnitTestResults,
            XmlReport = true,
            NoAppDomain = true
        });
    },
    parameters.Paths.Files.TestCoverageOutputFilePath,
    new OpenCoverSettings()
        .WithFilter(testCoverageFilter)
        .ExcludeByAttribute(testCoverageExcludeByAttribute)
        .ExcludeByFile(testCoverageExcludeByFile));
});

いくつかの失敗したテストがありますが、OpenCover への呼び出しは期待どおりに例外で失敗しません。

実際に失敗した単体テストがある場合、OpenCover に失敗するように指示する方法はありますか?

4

1 に答える 1

7

OpenCoverSettingsクラスには、ReturnTargetCodeOffset プロパティが含まれてますこれを 0 に設定すると、OpenCover に、ターゲット プロセス自体のリターン コードではなく、ターゲット プロセスのリターン コードを返すように指示します。詳細については、こちらを参照してください。これにより、失敗したテストがある場合、Cake はゼロ以外の終了コードを正しく処理し、失敗したテストのために例外をスローします。

上記のコード スニペットは、次のように変更する必要があります。

Task("Test-xUnit")
    .WithCriteria(() => DirectoryExists(parameters.Paths.Directories.PublishedxUnitTests))
    .Does(() =>
{
    EnsureDirectoryExists(parameters.Paths.Directories.xUnitTestResults);

    OpenCover(tool => {
        tool.XUnit2(GetFiles(parameters.Paths.Directories.PublishedxUnitTests + "/**/*.Tests.dll"), new XUnit2Settings {
            OutputDirectory = parameters.Paths.Directories.xUnitTestResults,
            XmlReport = true,
            NoAppDomain = true
        });
    },
    parameters.Paths.Files.TestCoverageOutputFilePath,
    new OpenCoverSettings { ReturnTargetCodeOffset = 0 }
        .WithFilter(testCoverageFilter)
        .ExcludeByAttribute(testCoverageExcludeByAttribute)
        .ExcludeByFile(testCoverageExcludeByFile));
});
于 2016-08-13T18:38:00.980 に答える