标签: nunit-3.0

NUnit 3:禁止并行测试

我安装了最新的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)

c# nunit nunit-3.0

11
推荐指数
2
解决办法
1万
查看次数

单元测试在运行所有测试时失败但在调试时通过

我在Visual Studio 2017中使用NUnit3并进行TDD.自从我更新我的代码以进行最新的测试通过后,发生了一些非常奇怪的事情.

现在,当我单击Run All Tests时,我的其他3个测试失败,如下所示:

在此输入图像描述

它告诉我,Assert方法中的实际值和期望值不相等.

但是,当我在Assert方法所在的行放置一个断点并开始调试时,stacktrace显示expect和actual是相同的值,然后测试通过,如下所示:

在此输入图像描述

我做了一些愚蠢的事情,或者VS2017或NUnit中是否有错误?

这发生在其他任何人身上吗?

[编辑:我应该补充一点,我已将每个测试都写成一个单独的类]

c# nunit unit-testing visual-studio nunit-3.0

11
推荐指数
1
解决办法
5308
查看次数

如何使用NUnit和dotCover获得测试细节和覆盖范围?

我正在使用NUnit3运行dotCover来获取构建服务器上的覆盖率报告.我们还需要NUnit的详细输出来显示测试结果.有没有办法同时获得NUnit测试细节和dotCover文件而不运行NUnit两次?或者我是否需要运行NUnit进行详细测试,然后使用NUnit运行dotCover进行覆盖率报告?

nunit-console dotcover nunit-3.0

10
推荐指数
1
解决办法
343
查看次数

NUnit 3.0中是否有测试状态属性?

在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)

testing automation nunit nunit-3.0

9
推荐指数
1
解决办法
3796
查看次数

在Azure Devops门户上查看代码覆盖率报告

作为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框架的解决方案

azure asp.net-4.5 nunit-3.0 azure-devops azure-pipelines

9
推荐指数
1
解决办法
2625
查看次数

Nunit3如何根据TestFixtureSource传递的参数更改测试用例名称

我正在使用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,但我认为它不适合与灯具一起使用(它是专为测试用例设计的).

nunit nunit-3.0

8
推荐指数
1
解决办法
870
查看次数

NUnit:如何从非静态方法传递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)

c# junit nunit unit-testing nunit-3.0

8
推荐指数
2
解决办法
4175
查看次数

生成错误:无法加载文件或程序集"Microsoft.Build.Framework,Version = 15.1.0.0"或其依赖项之一

当我尝试生成我的.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 specflow nunit-3.0 visual-studio-2017

8
推荐指数
1
解决办法
1591
查看次数

错误从NUnit 2升级到NUnit 3时,"异步测试方法必须具有非void返回类型"

我必须重构从NUNIT 2到NUNIT 3的单元测试,并且以下语法抛出错误:

var expectedResponseMessage = new HttpResponseMessage();
Func<Task<HttpResponseMessage>> continuation = 
   () => Task.Factory.StartNew(() => expectedResponseMessage);
Run Code Online (Sandbox Code Playgroud)

错误:

异步测试方法必须具有非void返回类型

我怎么能改写这个?我尝试了很多语法,但没有运气.谢谢.

c# async-await nunit-3.0

8
推荐指数
1
解决办法
3374
查看次数

NUnit 不使用 .runsettings 文件中的参数和设置

我试图将现有的 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 visual-studio nunit-3.0

7
推荐指数
0
解决办法
1150
查看次数