Stryker 找不到 .csproj 文件,即使它是通过命令传递的
Stryker can't find .csproj file even though it's passed in command
当我尝试使用以下命令 运行 Stryker 时,它失败并提示找不到 .csproj
文件。该文件虽然存在于配置的位置:
C:\Users\Me\Documents\git\my_pkg>dotnet stryker --solution-path ".\My.Project.sln" --test-runner DotnetTest --project-file ".\test\My.Project.Tests\My.Project.Tests.csproj"
_____ _ _ _ _ ______ _______
/ ____| | | | | \ | | ____|__ __|
| (___ | |_ _ __ _ _| | _____ _ __ | \| | |__ | |
\___ \| __| '__| | | | |/ / _ \ '__| | . ` | __| | |
____) | |_| | | |_| | < __/ | | |\ | |____ | |
|_____/ \__|_| \__, |_|\_\___|_| (_)|_| \_|______| |_|
__/ |
|___/
Version: 0.20.0 (beta)
[10:41:49 INF] Time Elapsed 00:00:00.8016192
Stryker.NET failed to mutate your project. For more information see the logs below:
No .csproj file found, please check your project directory at C:\Users\Me\Documents\git\my_pkg
为什么找不到文件?
--project-file 应该指向你打算改变的项目,而不是单元测试项目。也就是说,如果 My.Project.csproj 是您正在测试的项目并且 My.Project.Tests.csproj 是伴随的单元测试,那么我通常会从命令行导航到包含 My.Project.Tests.csproj 和 运行 dotnet stryker
的文件夹。如果 My.Project.Tests.csproj 中只有一个项目引用,它将被自动检测到,Stryker 将尝试创建突变体来检查您的单元测试项目。如果 My.Project.Tests.csproj 文件中有多个项目引用,那么您将被要求通过传递 --project- 来阐明您打算改变哪个项目文件.
就我个人而言,我会在单元测试项目的根目录中创建一个 stryker-config.json,如下所示:https://github.com/stryker-mutator/stryker-net/blob/master/docs/Configuration.md
您可能想要这样的东西:
{
"stryker-config": {
"reporters": [
"progress",
"html"
],
"log-level": "info",
"log-file": true,
"timeout-ms": 10000,
"project-file": "My.Project.csproj",
"max-concurrent-test-runners": 4,
"threshold-high": 80,
"threshold-low": 70,
"threshold-break": 60,
"mutation-level": "Standard",
"excluded-mutations": [
"string"
],
"dashboard-compare": false
}
}
假设在您的单元测试项目中引用了 My.Project.csproj。
当我尝试使用以下命令 运行 Stryker 时,它失败并提示找不到 .csproj
文件。该文件虽然存在于配置的位置:
C:\Users\Me\Documents\git\my_pkg>dotnet stryker --solution-path ".\My.Project.sln" --test-runner DotnetTest --project-file ".\test\My.Project.Tests\My.Project.Tests.csproj"
_____ _ _ _ _ ______ _______
/ ____| | | | | \ | | ____|__ __|
| (___ | |_ _ __ _ _| | _____ _ __ | \| | |__ | |
\___ \| __| '__| | | | |/ / _ \ '__| | . ` | __| | |
____) | |_| | | |_| | < __/ | | |\ | |____ | |
|_____/ \__|_| \__, |_|\_\___|_| (_)|_| \_|______| |_|
__/ |
|___/
Version: 0.20.0 (beta)
[10:41:49 INF] Time Elapsed 00:00:00.8016192
Stryker.NET failed to mutate your project. For more information see the logs below:
No .csproj file found, please check your project directory at C:\Users\Me\Documents\git\my_pkg
为什么找不到文件?
--project-file 应该指向你打算改变的项目,而不是单元测试项目。也就是说,如果 My.Project.csproj 是您正在测试的项目并且 My.Project.Tests.csproj 是伴随的单元测试,那么我通常会从命令行导航到包含 My.Project.Tests.csproj 和 运行 dotnet stryker
的文件夹。如果 My.Project.Tests.csproj 中只有一个项目引用,它将被自动检测到,Stryker 将尝试创建突变体来检查您的单元测试项目。如果 My.Project.Tests.csproj 文件中有多个项目引用,那么您将被要求通过传递 --project- 来阐明您打算改变哪个项目文件.
就我个人而言,我会在单元测试项目的根目录中创建一个 stryker-config.json,如下所示:https://github.com/stryker-mutator/stryker-net/blob/master/docs/Configuration.md
您可能想要这样的东西:
{
"stryker-config": {
"reporters": [
"progress",
"html"
],
"log-level": "info",
"log-file": true,
"timeout-ms": 10000,
"project-file": "My.Project.csproj",
"max-concurrent-test-runners": 4,
"threshold-high": 80,
"threshold-low": 70,
"threshold-break": 60,
"mutation-level": "Standard",
"excluded-mutations": [
"string"
],
"dashboard-compare": false
}
}
假设在您的单元测试项目中引用了 My.Project.csproj。