Roslyn -- 如何在NamingStylesTests.cs中运行测试?

Roslyn -- How to run tests in NamingStylesTests.cs?

提问人:Harald Nordgren 提问时间:10/23/2023 最后编辑:Harald Nordgren 更新时间:10/31/2023 访问量:144

问:

我正在尝试解决 Roslyn (https://github.com/dotnet/roslyn) 中的问题,但我在运行某些单元测试时遇到问题。我在带有 M2 芯片的 macOS Ventura 上。

运行

./build.sh --test

它运行测试套件,但看起来不是这样,例如,这个测试根本运行:

TestCamelCaseLocalsUpperCaseConstants_ConstLocal

有问题的文件是

src/Analyzers/CSharp/Tests/NamingStyles/NamingStylesTests.cs

有人可以帮我吗?

.NET macOS Roslyn xunit.net

评论

0赞 Jason Malinowski 10/24/2023
您应该能够“dotnet test”包含测试的程序集。
0赞 Harald Nordgren 10/24/2023
@JasonMalinowski 你能告诉我这个测试是怎么做到的吗?

答:

0赞 VonC 10/26/2023 #1

来自杰森·马林诺夫斯基的评论

您应该能够“”包含测试的程序集。dotnet test

若要扩展注释,应该可以通过首先标识包含测试的程序集,然后使用命令运行测试来执行特定测试。dotnet test

[macOS Ventura with M2 chip] ---(build Roslyn)---> [Compiled Roslyn Project]
                                                       |
                                           (dotnet test on specific assembly)
                                                       |
                                                       +--> [Specific Test Assembly]
                                                       |
                                                       +--> [TestCamelCaseLocalsUpperCaseConstants_ConstLocal]

生成 Roslyn 项目。

cd path/to/roslyn
./build.sh

然后标识包含 .通常,程序集是测试项目的名称,在这种情况下,可以是类似 .但是,这可能会有所不同,您可能需要检查项目配置或生成输出,以查找程序集的确切名称和位置。NamingStylesTests.csMicrosoft.CodeAnalysis.CSharp.UnitTests.dll

确定程序集后,使用指定程序集和选项的命令运行所需的测试。
请参阅“运行选定的单元测试
dotnet test--filter"

dotnet test path/to/Microsoft.CodeAnalysis.CSharp.UnitTests.dll --filter FullyQualifiedName~Microsoft.CodeAnalysis.CSharp.UnitTests.NamingStylesTests.TestCamelCaseLocalsUpperCaseConstants_ConstLocal

跟:

  • path/to/Microsoft.CodeAnalysis.CSharp.UnitTests.dll包含测试的程序集的路径。
  • --filter选项,用于指定要运行的测试的完全限定名称。

我需要一些帮助才能真正找到程序集。
这是我的测试文件的完整路径:.
似乎没有任何实际包含“”或“之类的词。
src/Analyzers/CSharp/Tests/NamingStyles/NamingStylesTests.cs.dll./build.shAnalyzersNamingStyles

测试项目的项目文件 () 应指示输出程序集名称。导航到包含 的目录,然后查找文件。打开文件并检查元素。*.csprojNamingStylesTests.cs.csproj<AssemblyName>

cd src/Analyzers/CSharp/Tests/NamingStyles
cat NamingStylesTests.csproj | grep AssemblyName

检查生成输出(在屏幕上和任何日志文件中)中是否有指示程序集生成位置的消息。

./build.sh | grep -i "NamingStylesTests"

在生成项目目录中搜索程序集。它可能位于 or 目录中,也可能位于 or 子目录下。binoutDebugRelease

find . -name '*NamingStylesTests*.dll'

生成配置也可能影响程序集生成。确保生成配置包含项目,并配置为生成程序集。NamingStylesTests

cat Build/Targets/Settings.props | grep -i "NamingStylesTests"

评论

0赞 Harald Nordgren 10/26/2023
谢谢,但我需要一些帮助才能真正找到程序集。这是我的测试文件的完整路径:.似乎没有任何.dll实际上是由它包含“分析器”或“命名样式”之类的词生成的。src/Analyzers/CSharp/Tests/NamingStyles/NamingStylesTests.cs./build.sh
1赞 VonC 10/26/2023
@HaraldNordgren 我已经编辑了答案以解决您的评论。
0赞 Harald Nordgren 10/26/2023
嗨,又来了!此文件夹不包含 .csproj,与其直接父文件夹相同:github.com/dotnet/roslyn/tree/main/src/Analyzers/CSharp/Tests/...。我找到了一个文件Settings.props,但再次发现那里没有提到NamingStyle。当我从终端搜索时,也没有找到任何相关内容。eng/targets/Settings.propsNamingStyle*.dll
0赞 VonC 10/26/2023
@HaraldNordgren 有结果吗?find . -name 'CSharpAnalyzers.UnitTests.dll'
0赞 Harald Nordgren 10/27/2023
很遗憾,不行!
3赞 Youssef13 10/31/2023 #2

层(即目录)是 CodeStyle 和 Features 之间的共享层。这是因为分析器以两种不同的方式交付:Analyzerssrc/Analyzers

  1. 直接使用 IDE(这来自功能层)
  2. 使用 CodeStyle NuGet 包(这来自 CodeStyle 层)

因此,测试遵循相同的产品结构。有问题的测试包含在两个测试程序集中:

  1. Microsoft.CodeAnalysis.CSharp.CodeStyle.UnitTests
  2. Microsoft.CodeAnalysis.CSharp.Features.UnitTests

所以,你可以去跑path\to\Roslyn\src\CodeStyle\CSharp\Testsdotnet test --filter "FullyQualifiedName~NamingStylesTests"

为了阐明这些测试在没有任何 csproj 时是如何编译的,这个想法是包含所谓的“共享项目”,请参阅 CSharpAnalyzers.UnitTests.shproj 和 CSharpAnalyzers.UnitTests.projitemssrc\Analyzerssrc\Analyzers

然后,共享项目包含在 Microsoft.CodeAnalysis.CSharp.Features.UnitTests 和 Microsoft.CodeAnalysis.CSharp.CodeStyle.UnitTests 中。

评论

0赞 Harald Nordgren 10/31/2023
多谢!我设法让一个特定的测试现在开始,这是真正的进步:.但是,它立即失败了。dotnet test --filter "FullyQualifiedName~NamingStylesTests.TestPascalCaseMethod_ConstructorsAreIgnored"
0赞 Harald Nordgren 10/31/2023
你看到你这边也有同样的事情吗?System.AggregateException : One or more errors occurred. (An exception was thrown while initializing part "Microsoft.CodeAnalysis.Test.Utilities.TestExportJoinableTaskContext".) (An exception was thrown while initializing part "Microsoft.CodeAnalysis.Test.Utilities.TestExportJoinableTaskContext".)
0赞 Harald Nordgren 10/31/2023
可能和这个一样?github.com/dotnet/roslyn/issues/70431