我安装了最新的NUnit(3.2.0),并且我的所有测试都是并行运行的.它可能看起来像是理想的行为,但我没有要求它,实际上它打破了我的一些测试.我有一些初始化,[OneTimeSetUp]
其中依赖于线程,似乎我无法做任何事情迫使NUnit按顺序运行我的测试.我已经阅读了文档,并指出默认情况下测试不是并行运行,而实际上它们是!
此外,我试图添加以下属性:[assembly: Parallelizable(ParallelScope.None)]
- 没有运气.
有人知道如何改变这种行为吗?
PS我用ReSharper运行它,但也尝试使用MSVS加载项.
UPD:我正在使用MVVM Light DispatcherHelper.Initialize()
(内部[OneTimeSetUp]
)来存储调度程序对象,稍后由几个测试使用它.如果线程不同(在测试和安装方法之间),则测试中的操作将异步执行,并且我的测试失败.
我在不同的测试中检查了线程ID,它们都是不同的.
UPD2:摘自文档:
NUnit 3.0框架可以在程序集中并行运行测试.这是与发动机并行测试执行完全独立的设施,尽管可以在同一测试运行中使用两者.
默认情况下,不会执行并行执行.属性用于指示哪些测试可以并行运行以及它们与其他测试的关系.
如果这并不意味着组件中的测试不应该在明确指定之前并行运行,那么它意味着什么?为什么[assembly: Parallelizable(ParallelScope.None)]
对测试并行执行没有影响?
UPD3:
问题的答案可能在下面找到,但是如果你被卡住了(就像我一样),DispatcherHelper.Initialize()
你只需要从OneTimeSetUp
每个使用调度程序的测试中删除此初始化并放入以下行:
DispatcherHelper.Reset();
DispatcherHelper.Initialize();
Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2017中使用NUnit3并进行TDD.自从我更新我的代码以进行最新的测试通过后,发生了一些非常奇怪的事情.
现在,当我单击Run All Tests时,我的其他3个测试失败,如下所示:
它告诉我,Assert方法中的实际值和期望值不相等.
但是,当我在Assert方法所在的行放置一个断点并开始调试时,stacktrace显示expect和actual是相同的值,然后测试通过,如下所示:
我做了一些愚蠢的事情,或者VS2017或NUnit中是否有错误?
这发生在其他任何人身上吗?
[编辑:我应该补充一点,我已将每个测试都写成一个单独的类]
我正在使用NUnit3运行dotCover来获取构建服务器上的覆盖率报告.我们还需要NUnit的详细输出来显示测试结果.有没有办法同时获得NUnit测试细节和dotCover文件而不运行NUnit两次?或者我是否需要运行NUnit进行详细测试,然后使用NUnit运行dotCover进行覆盖率报告?
在NUnit v.<3.0中有TestContext类,并且有一个属性可以告诉我们先前运行的测试的状态.
要访问我们可以使用的属性 TestContext.CurrentContext.Result.Status
现在在NUnit 3.0中没有属性Status
!所以我的所有测试都需要改变.
我的问题是下一个:是否有可能在NUnit 3.0中获得测试状态,因为它可以在以前的版本中进行?
有趣的事情:有类TestStatus具有属性:Passed, Failed
等等,我们用它来比较当前状态.这个类出现在NUnit 3.0中!
我的代码:
if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
{
//Be happy if it works)
}
Run Code Online (Sandbox Code Playgroud) 作为azure devops构建管道的一部分,我正在运行NUnit测试(.Net Framework 4.5中的项目)。
- task: VSTest@2
inputs:
testAssemblyVer2: 'tests/**/*.Tests.dll'
pathtoCustomTestAdapters: '$(Build.SourcesDirectory)/packages'
codeCoverageEnabled: true
displayName: 'NUnit Testing'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: JaCoCo
summaryFileLocation: '$(Common.TestResultsDirectory)/**/*.xml'
displayName: 'Publish Code Coverage'
// summaryFileLocation: '$(Common.TestResultsDirectory)/**/*.coverage'
Run Code Online (Sandbox Code Playgroud)
但是我看不到覆盖率报告,只看到覆盖率结果的下载链接...
如何将.coverage报告转换为JaCoCo格式?或直接以JaCoCo格式生成报告?
我已经看到了一些针对.Net Core(链接)的解决方案,但是没有针对.Net框架的解决方案
我正在使用NUnit 3.0和TestFixtureSource在不同的参数/配置下多次在灯具内运行测试用例(我确实希望在TestFixture级别执行此操作).简单的例子:
[TestFixtureSource(typeof (ConfigurationProvider))]
public class Fixture
{
public Fixture(Configuration configuration)
{
_configuration = configuration;
}
private Configuration _configuration;
[Test]
public void Test()
{
//do something with _configuration
Assert.Fail();
}
}
Run Code Online (Sandbox Code Playgroud)
假设其中一个配置的Test()失败,另一个配置失败.在运行报告文件和Visual Studio的测试资源管理器中,失败和成功运行的名称将显示为Test(),它不会告诉我有关哪个设置导致问题的任何信息.
有没有办法在这种情况下影响测试用例名称(即每个夹具运行/配置的名称前缀)?作为一种解决方法,我现在在每个测试用例发生之前打印到结果输出,但我宁愿避免这样做.
由于NUnit 3.0处于测试阶段且此功能相当新,我无法在文档中找到任何内容.我发现了TestCaseData,但我认为它不适合与灯具一起使用(它是专为测试用例设计的).
我的测试因以下原因而失败:消息:TestCaseSourceAttribute上指定的sourceName必须引用静态字段,属性或方法.
这是我的代码:
const double MAX_DELTA = 0.01;
Qv_ges qv_ges_NE;
double Sum_Qv_ges_R_FL;
Qv_ges Qv_ges_Quer;
[SetUp]
public void init()
{
qv_ges_NE = Din1946.Calc_Qv_ges_NE(205.7d);
Sum_Qv_ges_R_FL = 15d + 15d + 15d + 15d + 15d + 10d + 10d + 10d + 10d + 10d + 10d + 10d;
Qv_ges_Quer = Din1946.Calc_Qv_ges_Quer(qv_ges_NE, Sum_Qv_ges_R_FL);
}
public IEnumerable<TestCaseData> TestCases_A()
{
yield return new TestCaseData(72.5, Qv_ges_Quer.FL.Value, MAX_DELTA);
yield return new TestCaseData(169.17, Qv_ges_Quer.RL.Value, MAX_DELTA);
yield return new TestCaseData(241.67, Qv_ges_Quer.NL.Value, MAX_DELTA);
yield return new TestCaseData(314.17, Qv_ges_Quer.IL.Value, MAX_DELTA);
} …
Run Code Online (Sandbox Code Playgroud) 当我尝试生成我的.feature文件时,我似乎随机得到以下错误.
偶尔我会更改或更改我的功能文件,并且此错误突然冒出:
#error Generation error: Could not load file or assembly 'Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
我完全不知道如何解决这个问题 - 我尝试添加对程序集的引用,更改SpecFlow/NUnit的版本,但似乎没有任何工作.
擦除我的项目副本并从源代码控制中拉出它最初工作,然后再次发生.
以下是我安装的软件包的完整列表:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net461" />
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net461" />
<package id="Microsoft.Data.Edm" version="5.8.2" targetFramework="net461" />
<package id="Microsoft.Data.OData" version="5.8.2" targetFramework="net461" />
<package id="Microsoft.Data.Services.Client" version="5.8.2" targetFramework="net461" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
<package id="NUnit" version="3.0.0" targetFramework="net461" />
<package id="NUnit3TestAdapter" version="3.9.0" targetFramework="net461" …
Run Code Online (Sandbox Code Playgroud) 我必须重构从NUNIT 2到NUNIT 3的单元测试,并且以下语法抛出错误:
var expectedResponseMessage = new HttpResponseMessage();
Func<Task<HttpResponseMessage>> continuation =
() => Task.Factory.StartNew(() => expectedResponseMessage);
Run Code Online (Sandbox Code Playgroud)
错误:
异步测试方法必须具有非void返回类型
我怎么能改写这个?我尝试了很多语法,但没有运气.谢谢.
我试图将现有的 Selenium 解决方案切换为使用 NUnit,因为它支持同一类中的测试并行化。我遇到的问题是它似乎没有使用选定的.runsettings
文件,尽管NUnit 支持它。我的意思是TestContext.Parameters.Count
它始终为 0,并且它不会将结果存储在<ResultDirectory>
我的 .runsettings 文件节点中指定的路径中。
我查看了文档和对AdapterSettings的引用(它具有解析 .runsettings 文件的逻辑),但我无法弄清楚为什么我TestContext.Paramaters
在使用.runsettings
文件时从未在我的测试中填充过。
我创建了一个简单的测试解决方案作为健全性检查和 POC,但它仍然没有填充。
我有
- NUnit 3.7.1
- NUnit3TestAdapter 3.7.0
-VisualStudio Professional 2017
我的 .runsettings 文件是:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at runtime -->
<TestRunParameters>
<Parameter name ="testParameter1" value="value1" />
<Parameter name ="testParameter2" value="value2" />
</TestRunParameters>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
我在测试中尝试做的所有事情:
using System;
using NUnit.Framework;
namespace ClassLibrary1
{
[TestFixture]
public class UnitTestClass1
{
[Test] …
Run Code Online (Sandbox Code Playgroud) nunit-3.0 ×10
nunit ×7
c# ×4
unit-testing ×2
asp.net-4.5 ×1
async-await ×1
automation ×1
azure ×1
azure-devops ×1
dotcover ×1
junit ×1
specflow ×1
testing ×1