通过https://msdn.microsoft.com/en-us/library/jj635153.aspx阅读 我创建了一个.RunSettings文件,其中包含一些类似于示例的参数:
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
Run Code Online (Sandbox Code Playgroud)
我计划.RunSettings为每个环境提供一个文件,其中包含适当的URL和凭据,用于在指定的RunSettings文件环境中运行CodedUI测试.
我可以看到从命令行引用我可以运行的设置文件:
vstest.console myTestDll.dll /Settings:Local.RunSettings /Logger:trx
vstest.console myTestDll.dll /Settings:QA.RunSettings /Logger:trx
Run Code Online (Sandbox Code Playgroud)
等等...
但我没有看到任何方式来调用如何TestRunParameters在codedUI测试中实际使用from.
我想要做的是设置测试初始化程序,使用它TestRunParameters来确定登录的位置以及要使用的凭据.像这样的东西:
[TestInitialize()]
public void MyTestInitialize()
{
// I'm unsure how to grab the RunSettings.TestRunParameters below
string entryUrl = ""; // TestRunParameters.webAppUrl
string userName = ""; // TestRunParameters.webAppUserName
string password = ""; // TestRunParameters.webAppPassword
LoginToPage(entryUrl, userName, password);
}
public void LoginToPage(string entryUrl, string …Run Code Online (Sandbox Code Playgroud) c# asp.net coded-ui-tests vs-unit-testing-framework runsettings
我们已经从VS2010迁移到VS2013环境.我们的解决方案有超过5K的单元测试,在VS2010上,他们花了大约5分钟,而在VS2013,他们需要大约20分钟.
我们看到使用该testsettings文件存在一个问题,因为它将VS2013配置为使用以前的测试框架,因此我们将其移动到一个runsettings文件中,这实际上解决了我们在转换时遇到的一些问题.
现在主要的想法是我们找不到如何配置VS2013来并行执行测试.在前VS上我们有一个<Execution parallelTestCount="0">似乎在runsettings文件上不可用的 设置.
总结一下,我们如何使用runsettings文件并行运行测试,以便我们使用更新的框架?
谢谢.
我正在尝试使Visual Studio的代码覆盖率工具有用.我正在研究遗留项目,为了重构所有这些代码,我添加了单元测试.问题是,当我测量代码覆盖率时,我只看到三个具有测试方法的dll程序集.
你们中的一些人可能会说"如果它不存在,就意味着它没有经过测试",基本上你是对的,但我希望这个机制可以帮助我避免犯错误.我想知道未经测试的类和方法在那里,所以我知道覆盖/未覆盖之间的比例.
这是我的自定义.runsettings文件的include/exclude部分.
<ModulePaths>
<Include>
<ModulePath>.*Some\.Library\.OfMine\.dll$</ModulePath>
<ModulePath>.*\.dll$</ModulePath>
</Include>
<Exclude>
<ModulePath>.*my\.tests\.dll$</ModulePath>
<ModulePath>.*xunit\.core\.dll$</ModulePath>
<ModulePath>.*fluentassertions\.dll$</ModulePath>
<ModulePath>.*fluentassertions\.core\.dll$</ModulePath>
</Exclude>
</ModulePaths>
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但代码覆盖率实际上也列出了FluentAssertions,XUnit和My.Tests.dll(存储测试),所以我将它们排除在外.那部分确实奏效了.这个链接帮助了我.但是,当我添加Some.Library.OfMine.dll时,它不会显示在代码覆盖率结果中.
为了帮助指出它,我添加了这一部分:
<SymbolSearchPaths>
<Path>E:\The\Absolute\Path\To\The\Test\Project\bin\Debug</Path>
</SymbolSearchPaths>
Run Code Online (Sandbox Code Playgroud)
并在测试项目中向Some.Library.OfMine.dll添加了一个引用.我确定在构建完成后,dll和pdb就在那里.
但是我仍然无法在代码覆盖率结果中看到覆盖/未覆盖库中的Some.Library.OfMine.dll.
实际上我可以做我想做的事吗?如果是这样,如何实现呢?
我试图从程序集Acme.Foundations.web.ext.dll中排除所有名称空间,但排除Acme.Foundations.Web.Ext.Controllers.请帮助创建一个runsettings文件.
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Exclude>
<ModulePath>.*Ext.Helpers*</ModulePath>
???
</Exclude>
</ModulePaths>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
Acme.Foundations.web.ext.dll
Acme.Foundations.Web.Ext.Controllers
Acme.Foundations.Web.Ext.Helper
Acme.Foundations.Web.Ext.Models
Acme.Foundations.Web.Ext.Properties
Acme.Foundations.Web.Ext.Resources
Acme.Foundations.Web.Ext.Utilities
Acme.Foundations.Web.Ext.ViewModels
Acme.Identity.Web
Acme.Identity.Web.App_Start
Acme.Identity.Web.Identity
Acme.Utilities
System.Web.Mvc.Html
Run Code Online (Sandbox Code Playgroud) 我们在Visual Studio Online(VSTS)构建定义中遇到代码覆盖问题,在定义自定义.runsettings文件时没有返回任何结果.
在本地,这工作正常,但是,当我们使用此文件更新Visual Studio Online上的构建定义时,它不会返回任何结果.
我的.runsettings文件,我发现每个例子都留在那里.
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<ResultsDirectory>.\TestResults</ResultsDirectory>
<TargetPlatform>x86</TargetPlatform>
<TargetFrameworkVersion>Framework40</TargetFrameworkVersion>
<TreatTestAdapterErrorsAsWarnings>false</TreatTestAdapterErrorsAsWarnings>
<CollectSourceInformation>true</CollectSourceInformation>
<MaxCpuCount>0</MaxCpuCount>
</RunConfiguration>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Include>
<ModulePath>.*\.dll$</ModulePath>
<ModulePath>.*\.exe$</ModulePath>
</Include>
<Exclude>
<ModulePath>.*CPPUnitTestFramework.*</ModulePath>
<ModulePath>.*TestAdapter.*</ModulePath>
<ModulePath>.*xamarin.*</ModulePath>
</Exclude>
</ModulePaths>
<Functions>
<Exclude>
<Function>^Fabrikam\.UnitTest\..*</Function>
<Function>^std::.*</Function>
<Function>^ATL::.*</Function>
<Function>.*::__GetTestMethodInfo.*</Function>
<Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
<Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
</Exclude>
</Functions>
<Attributes>
<Exclude>
<Attribute>^System.Diagnostics.DebuggerHiddenAttribute$</Attribute>
<Attribute>^System.Diagnostics.DebuggerNonUserCodeAttribute$</Attribute>
<Attribute>^System.Runtime.CompilerServices.CompilerGeneratedAttribute$</Attribute>
<Attribute>^System.CodeDom.Compiler.GeneratedCodeAttribute$</Attribute>
<Attribute>^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>
<Attribute>^NUnit.Framework.TestFixtureAttribute$</Attribute>
<Attribute>^Xunit.FactAttribute$</Attribute>
<Attribute>^Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute$</Attribute>
</Exclude>
</Attributes>
<Sources>
<Exclude>
<Source>.*\\atlmfc\\.*</Source>
<Source>.*\\vctools\\.*</Source>
<Source>.*\\public\\sdk\\.*</Source>
<Source>.*\\microsoft sdks\\.*</Source>
<Source>.*\\vc\\include\\.*</Source>
</Exclude>
</Sources>
<CompanyNames>
<Exclude>
<CompanyName>.*microsoft.*</CompanyName>
</Exclude>
</CompanyNames> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用vstest.console.exe生成代码覆盖率报告.我也使用.runsettings文件并将其作为参数传递.
无论我想做什么,它只为moq.dll生成一个覆盖率报告.
我在下面分享我正在运行的命令参数的全文以及.runsettings文件的内容.任何想法,我在哪里做错了什么?
命令:
vstest.console.exe"C:\ Xyz.Tests\bin\Debug \netcoreapp2.0\Xyz.Tests.dll"/ InIsolation/EnableCodeCoverage /settings:CodeCoverage.runsettings
CodeCoverage.runsettings文件内容:
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" enabled="false">
<Configuration>
<CodeCoverage>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
我试图通过使用runsettings文件来限制在TFS中的代码覆盖率过程中分析的程序集,但是即使我明确地将它们排除在外,一些程序集也坚持要进行分析.
这是我目前的runsettings文件内容:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Configurations for data collectors -->
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage"
uri="datacollector://Microsoft/CodeCoverage/2.0"
assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Include>
<ModulePath>.*Cloud4Mobile.*</ModulePath>
</Include>
<Exclude>
<ModulePath>.*Tests.dll$</ModulePath>
<ModulePath>.*TestUtilities.dll$</ModulePath>
</Exclude>
</ModulePaths>
<CompanyNames>
<Include>.*Mobiltec.*</Include>
</CompanyNames>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
但是,当我从Visual Studio运行代码覆盖率来测试此文件时,分析仍然显示其他与我的过滤器不匹配的程序集,如AutoMapper和CacheManager:

请注意,默认情况下,我的设置已经排除了这些程序集,但即使这样,我也尝试明确地将它们排除在无效之外,如下所示:
<Exclude>
<ModulePath>^AutoMapper.dll$</ModulePath>
...
</Exclude>
Run Code Online (Sandbox Code Playgroud)
我尝试了正则表达式的所有变体,从限制较少(使用.*)到限制性最强(如该示例).这些程序集污染了我在TFS构建摘要中获得的报告,我想将它们从分析中删除.这是我从TFS获得的完整输出,这显然是无用的:

我设法使用此.runsettings配置文件删除了大部分内容,但是如何确保这些异常值也不会显示在那里?为什么他们甚至首先显示,考虑到它们与我的包含过滤器完全匹配?
我有一个UnitTests.dll,Common.dll被引用(都是用 VS2015 构建的)。
我有以下目录结构:
C:\Test\
- UnitTests.dll
- UnitTests.runsettings
C:\Bin\
- Common.dll
Run Code Online (Sandbox Code Playgroud)
UnitTests.runsettings 内容如下:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<TargetPlatform>x64</TargetPlatform>
</RunConfiguration>
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>False</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
<AssemblyResolution>
<Directory Path="C:\Bin\" includeSubDirectories="true" />
</AssemblyResolution>
</MSTest>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
我调用测试:
C:\Test> vstest.console.exe UnitTests.dll /settings:UnitTests.runsettings /inIsolation
Run Code Online (Sandbox Code Playgroud)
vstest.console.exe指的是C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe。
我收到以下错误:
Starting test execution, please wait...
Failed TestMethod1
Error Message:
Test method UnitTests.UnitTest1.TestMethod1 threw exception: System.IO.FileNotFoundException: Could not load file or assembly 'Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or …Run Code Online (Sandbox Code Playgroud) 我在 .NET Core 项目中有一组单元测试并使用 runsettings 文件。我正在尝试设置 Azure DevOps 以对我的部署进行自动化测试。作为此过程的一部分,我需要覆盖命令行上运行设置中的参数。
我有一个包含以下部分的运行设置文件:
<TestRunParameters>
<Parameter name="ApiUrl" value="https://myurl..." />
</TestRunParameters>
Run Code Online (Sandbox Code Playgroud)
我有一个静态构造函数,可以像这样保存 TestContext:
[ClassInitialize]
public static void TestClassInitialize(TestContext context)
{
TestContext = context;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方法从 TestContext 检索设置:
protected string GetStringSetting(string settingName)
{
return TestContext.Properties[settingName] as string;
}
Run Code Online (Sandbox Code Playgroud)
当我使用选定的 runsettings 文件运行测试时,它会获取 TestContext 并且我看到 ApiUrl 条目已成功检索。
现在,我想从命令行设置此参数。我正在使用如下命令:
dotnet test <myproject.csproj> --configuration Release -- ApiUrl=https://newurl
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,指出字典不包含键“ApiUrl”,这表明该设置未处理。通过阅读文档,我认为也许我需要使用 TestRunParameters.ApiUrl 完全指定设置的名称。这给了我一个 XML 错误。
从我读到的所有内容来看,我认为我这样做是正确的,无法找出问题所在。我使用的是 2.1.503 版本的工具。
有人可以指导我如何进行这项工作吗?
我正在为使用DocumentDB(CosmosDB)作为存储的dotnet核心应用程序编写xUnit单元测试用例。编写单元测试以针对本地cosmos db仿真器执行。在Azure DevOps构建环境中,我设置了Azure Cosmos DB CI / CD任务,该任务在内部创建了一个容器来安装模拟器。但是,我无法弄清楚如何将仿真器的端点传递给xUnit固定装置?
xUnit固定装置是否可以通过任何方式读取.runsettings测试参数,或者可以通过其他来源传递参数?
更新资料
目前,我使用环境变量实现了该方案,但仍然不满意在构建任务中使用powershell将连接字符串定义为环境变量,并在执行单元测试期间通过代码读取该字符串。我在想是否还有另一种方法可以实现它。
下面的快照显示了如何将构建任务当前配置为解决方法,以实现所需的目标:

并将代码读取为
var serviceEndpoint = Environment.GetEnvironmentVariable("CosmosDbEmulatorEndpointEnvironmentVariable");
Run Code Online (Sandbox Code Playgroud)
由于UnitTest任务提供了传递.runsettings / .testsettings的选项,该选项带有覆盖测试运行参数的选项,因此认为使用这些选项可以实现某些目标。
我正在尝试开发一个自动回归测试框架作为单元测试。所以我使用有序测试来组合不同的测试步骤,并以易于使用的方式组合它们。出于配置目的,我想使用runsettings文件,尤其是 TestRunParameters。这工作没有任何错误,但只有在单独执行每个测试时才有效。如果我使用orderedtest执行测试,TestContext我用来访问 TestRunParameters 的对象不再包含它们。我在直接测试方法的同时调试对象,同时也使用有序测试进行测试。在第一种情况下,对象具有所需的属性,但是当按照orderedtest 执行测试时,对象看起来完全不同。这两种类型的执行之间有什么主要区别吗?
不同的 TestContext 对象:
我得到的错误如下:
Ergebnis StackTrace: at Regression.FileSystem.FileSystemTestInitializer(TestContext context) in \FileSystem.cs:line 18
Ergebnis Meldung: Class Initialization method Regression.FileSystemTestInitializer threw exception. System.NullReferenceException: System.NullReferenceException: Object reference not set to an instance of an object..
Run Code Online (Sandbox Code Playgroud)
我执行以测试和加载设置的代码如下:
namespace Regression
{
[TestClass]
public class FileSystem
{
private static Logger logger = LogManager.GetCurrentClassLogger();
private static Dictionary<String, String> runSettings = new Dictionary<String, String>();
[ClassInitialize]
public static void …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种使用相对文件路径定义程序集分辨率值的方法。
我按照 Microsoft文档的建议通过定义和引用环境变量来解决此问题。正如您从下面的代码片段中看到的,我定义了一个环境变量“test”,并在 MSTest 适配器部分引用它。使用 VS 编译和运行测试会产生有关缺少引用依赖项的错误。
我已经验证通过将“测试”值设置为等于硬编码目录路径可以解决此问题。除了代码片段中设置的值之外,我还尝试了以下“test”值定义,但没有成功:
<RunConfiguration>
<MaxCpuCount>1</MaxCpuCount>
<!-- Path relative to directory that contains .runsettings file-->
<ResultsDirectory>.\TestResults</ResultsDirectory>
<!-- x86 or x64 -->
<!-- You can also change it from the Test menu; choose "Processor Architecture for AnyCPU Projects" -->
<TargetPlatform>x86</TargetPlatform>
<!-- Framework35 | [Framework40] | Framework45 -->
<TargetFrameworkVersion>Framework40</TargetFrameworkVersion>
<!-- Path to Test Adapters -->
<TestAdaptersPaths>%SystemDrive%\Temp\foo;%SystemDrive%\Temp\bar</TestAdaptersPaths>
<!-- TestSessionTimeout was introduced in Visual Studio 2017 version 15.5 -->
<!-- Specify timeout in milliseconds. A valid …Run Code Online (Sandbox Code Playgroud) 是否可以从代码指标中排除类库或代码文件?我找不到很好的资源,因为他们似乎都专注于代码覆盖,可以在.runsettings文件中设置.
我希望在测试项目的代码行上没有警告的构建.
c# code-metrics visual-studio visual-studio-2013 runsettings
runsettings ×13
c# ×8
unit-testing ×3
.net ×2
.net-core ×2
mstest ×2
asp.net ×1
azure-devops ×1
code-metrics ×1
ordered-test ×1
testcontext ×1
testing ×1
tfsbuild ×1
xunit ×1