使用MSTest,xUnit或NUnit与dotnet核心

Kei*_*son 5 .net mstest asp.net-core

TLDR - 跳转到答案,了解有关正在运行的xUnit或MSTest设置的详细信息.xUnit是最不痛苦的选择.

我一直无法让NUnit在我的构建服务器上工作,所以我已经尝试了尝试xUnit和MSTest - 两者都没有对我有用.

MSTest我不知道 - 我希望这可以工作,但是当我尝试从nuget安装dotnet-test-mstest时,我得到了依赖性问题,因为它的所有依赖库都不兼容netcoreapp1,例如....

依赖项MSTest.ObjectModel 1.0.1-preview不支持框架.NETCoreApp,Version = v1.0.

依赖关系MSTest.TestAdapter.Dotnet 1.0.4-preview不支持框架.

任何人都可以提供有关为什么会发生这种情况的建议吗?

Kei*_*son 6

我设法通过按照这些说明创建全新项目来实现这一目标......

https://docs.microsoft.com/en-us/dotnet/articles/core/testing/using-mstest-on-windows

似乎MSTest dotnet核心项目需要创建为控制台应用程序才能工作..?

为了帮助所有其他人,这里是我最终得到的project.json.

{
    "version": "1.0.0-*",
    "testRunner": "mstest",

    "dependencies": {
        "dotnet-test-mstest": "1.1.1-preview",
        "MyLibrary": {
            "target": "project"
        },
        "Microsoft.NETCore.App": {
            "type": "platform",
            "version": "1.0.1"
        },
        "MSTest.TestFramework": "1.0.4-preview",
        "NSubstitute": "2.0.0-rc"
    },

    "frameworks": {
        "netcoreapp1.0": {
            "imports": "dnxcore50"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我似乎在做两件不同的关键事情.首先,我的关键依赖是...

"NETStandard.Library": "1.6.0"
Run Code Online (Sandbox Code Playgroud)

而在新的project.json中

"Microsoft.NETCore.App": {
        "type": "platform",
         "version": "1.0.1"
     }
Run Code Online (Sandbox Code Playgroud)

(在原始的project.json中,它作为子依赖项放在文件的框架部分中).

另一个是在'newtcoreapp1.0'下的导入部分.在原始的project.json中,我使用了这个,而工作的是导入dnxcore50(尽管我仍然不相信这实际上是正确的).

看来MSTest.TestFramework的1.0.5预览存在一个错误 - 我最终改变了之前版本的版本.使用1.0.5,测试会加载,但每个都会因错误而失败......

无法从程序集"Microsoft.VisualStudio.TestPlatform.TestFramework"加载类型"LogMessageHandler"

我四处寻找提交这个作为错误但没有运气的地方.如果有人发现同样的问题,并知道在哪里记录它,请告诉我,我会'+1'它.

为了完整性,这里是一个适用于NUnit的project.json文件(虽然它是NUnit 3并且正在阅读它的输出文件(在撰写本文时)是VSTS上的一个问题...

{
    "dependencies": {
        "MyLibrary": {
            "target": "project"
        },
        "NETStandard.Library": "1.6.0",
        "NUnit": "3.5.0",
        "dotnet-test-nunit": "3.4.0-beta-1"
    },
    "frameworks": {
        "netcoreapp1.0": {
            "imports": [
                "netcoreapp1.0",
                "portable-net45+win8"
            ],
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "version": "1.0.1-*",
                    "type": "platform"
                },
                "NSubstitute": "2.0.0-rc"
            }
        }
    },
    "testRunner": "nunit",
    "version": "1.0.0-*"
}
Run Code Online (Sandbox Code Playgroud)

这里是xUnit - 我会更多地玩这个,因为它在VSTS上看起来更可行......

{
    "version": "1.0.0-*",
    "buildOptions": {
        "debugType": "portable"
    },
    "dependencies": {
        "System.Runtime.Serialization.Primitives": "4.1.1",
        "xunit": "2.1.0",
        "dotnet-test-xunit": "1.0.0-rc2-build10015",
        "NSubstitute": "2.0.0-rc",
        "MyLibrary": {
            "target": "project"
        }

    },
    "testRunner": "xunit",
    "frameworks": {
        "netcoreapp1.0": {
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "type": "platform",
                    "version": "1.0.1"
                }
            },
            "imports": [
                "dotnet5.4",
                "portable-net451+win8"
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更实用的xUnit信息 - https://docs.microsoft.com/en-us/dotnet/articles/core/testing/unit-testing-with-dotnet-test

总的来说,我发现,一旦将VSTS考虑在内,xUnit远远超出了最简单的选择 - 你只需要设置构建服务器任务以使用dotnet测试命令行,然后使用发布测试文件任务显示结果.经过很多痛苦后,我仍然无法通过构建服务器获得MS测试运行.

  • 你对MSTest.TestFramework的1.0.5预览绝对正确.正如你所说,我把它改为1.0.4,一切正常.我不明白为什么没有关于.Net Core的正确文档?他们网站上的一些示例和代码在其他领域也根本不起作用.本教程说我们需要使用'Library'而不是'Console Application'. (2认同)