标签: nunit-3.0

NUnit3:Assert.Throws with async Task

我正在尝试将测试移植到NUnit3并且收到System.ArgumentException:不支持'async void'方法,请改为使用'async Task'.

[Test]
public void InvalidUsername()
{
...
var exception = Assert.Throws<HttpResponseException>(async () => await client.LoginAsync("notarealuser@example.com", testpassword));
exception.HttpResponseMessage.StatusCode.ShouldEqual(HttpStatusCode.BadRequest); // according to http://tools.ietf.org/html/rfc6749#section-5.2
...
}
Run Code Online (Sandbox Code Playgroud)

Assert.Throws似乎采用TestDelegate,定义为:

public delegate void TestDelegate();
Run Code Online (Sandbox Code Playgroud)

因此ArgumentException.移植此代码的最佳方法是什么?

c# nunit asynchronous nunit-3.0

30
推荐指数
3
解决办法
7917
查看次数

如何在Windows中安装NUnit 3控制台并运行测试?

我想从这样的控制台运行测试(在任何目录中,dll可以是不同的.NET版本):

$ nunit3-console test.dll
Run Code Online (Sandbox Code Playgroud)

我google了很多,但找不到如何设置这个.官方教程没有任何用处,完全为零,跟随它让我无处可去:https://github.com/nunit/docs/wiki/Installation

c# nunit unit-testing nunit-console nunit-3.0

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

如何在TeamCity 9.x中安装nUnit 3 nunit3-console.exe

现在,TeamCity 9.1.x支持NUnit 3.0,但是您必须安装运行器并在步骤中指定nunit3.console.exe的路径.我的问题是我在哪里复制nunit3-console.exe?我必须把它放在所有代理商身上吗?我是否将它放在我的主TeamCity服务器上的目录中,它将由代理共享或拉取?似乎没有关于在何处复制这些文件的良好文档,以便所有代理都可以使用它们.

teamcity nunit-3.0

16
推荐指数
4
解决办法
1万
查看次数

NUnit 3.2.1 + TeamCity:无法加载文件或程序集'nunit.framework'

我最近更新到TeamCity 9.1.6来运行基于NUnit 3.2.1的新单元测试.但是现在我在运行测试时遇到了麻烦:

我在构建步骤中选择了NUnit3执行程序,并相应地进行了配置:

构建步骤配置

在构建时,我收到一个错误:"无法加载文件或程序集'nunit.framework'或其依赖项之一.系统无法找到指定的文件." .

构建日志

一切都应该没问题,路径很好,程序集在Test程序集的路径中,一切都是在AnyCPU配置中构建的.还有一个错误声明NUnit版本不是发行版本,我认为这是废话,它是NUnit网站上的一个版本.并且错误似乎没有破坏任何东西(即使我在'nunit.framework'错误之前出现错误,它仍然存在,当我修复那个错误时,构建得到了进一步).

任何线索赞赏!

更新: 使用命令行运行程序运行测试并运行相同的nunit3-console.exe工作正常.所以我想这是NUnit特定于跑步者的问题.不过,欢迎提出如何解决此问题的建议.

更新2: 我尝试将TeamCity使用的解决方案包和NUnit-Console降级到3.0.0 - 仍然是相同的结果.

更新3: 正如我所怀疑的,TeamCity支持确认有关"NUnit版本不受支持"的消息是错误的,并且不应该影响任何内容.

.net teamcity nunit nunit-3.0 teamcity-9.1

16
推荐指数
2
解决办法
5830
查看次数

如何在NUnit 3 Visual Studio适配器中启用跟踪输出?

[Test]
public void Test1()
{
    Trace.TraceInformation("Hello");
}
Run Code Online (Sandbox Code Playgroud)

从VS 2015运行时,输出窗口(测试)显示没有跟踪线:

------ Discover test started ------
NUnit Adapter 3.4.0.0: Test discovery starting
NUnit Adapter 3.4.0.0: Test discovery complete
========== Discover test finished: 9 found (0:00:01.325888) ==========
------ Run test started ------
NUnit Adapter 3.4.0.0: Test execution started
Running selected tests in C:\Projects\bla-bla.dll
NUnit3TestExecutor converted 9 of 9 NUnit test cases
NUnit Adapter 3.4.0.0: Test execution complete
========== Run test finished: 1 run (0:00:03.5445181) ==========
Run Code Online (Sandbox Code Playgroud)

我记得它在NUnit 2和VS 2013上运行良好.我是否需要以某种方式打开它?我app.config没有超越默认值<system.diagnostics>.

.net nunit visual-studio visual-studio-2015 nunit-3.0

15
推荐指数
1
解决办法
1920
查看次数

增加可读性以使用基于约束的断言来断言IsNotNullOrEmpty

我目前正在重写一些单元测试以使用NUnit 3而不是NUnit 2,并且需要将一些断言更改为基于约束的断言.我有以下断言:

Assert.IsNullOrEmpty(result);
Run Code Online (Sandbox Code Playgroud)

我改为:

Assert.That(result, Is.Null.Or.Empty);
Run Code Online (Sandbox Code Playgroud)

但是,断言时我对可读性并不完全满意IsNotNullOrEmpty:

Assert.That(result, Is.Not.Null.And.Not.Empty);
Run Code Online (Sandbox Code Playgroud)

我目前的建议是创建以下静态类:

public static class Text
{
    public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty;

    public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty;
}
Run Code Online (Sandbox Code Playgroud)

用法:

Assert.That(result, Text.IsNotNullOrEmpty);
Run Code Online (Sandbox Code Playgroud)

这提供了更好的可读性,但代价是引入了自定义约束.是否存在制定相同断言的标准方法,还是应该继续使用Is.Not.Null.And.Not.Empty

c# nunit unit-testing nunit-3.0

14
推荐指数
1
解决办法
4877
查看次数

ASP.Net Core 2.0 SignInAsync返回异常值不能为null,提供者

我有一个ASP.Net Core 2.0 Web应用程序我正在使用单元测试进行改造(使用NUnit).该应用程序工作正常,迄今为止大多数测试工作正常.

但是,测试身份验证/授权(用户是否已登录并可以访问已[Authorize]过滤的操作)失败...

System.ArgumentNullException: Value cannot be null.
Parameter name: provider
Run Code Online (Sandbox Code Playgroud)

...后...

await HttpContext.SignInAsync(principal);
Run Code Online (Sandbox Code Playgroud)

......但目前尚不清楚其根本原因是什么.代码执行在此处停止,并且IDE中没有显示异常,但代码执行返回给调用者,然后终止(但我仍然The program '[13704] dotnet.exe' has exited with code 0 (0x0).在VS的输出窗口中看到)

测试资源管理器显示红色并提供引用的异常(否则我不知道问题.)

我正在努力创建一个指向人们的复制品(到目前为止有点参与其中).

有谁知道如何确定根本原因?这是DI相关的问题(测试中没有提供但是正常执行中需要的东西)?

UPDATE1:提供请求的验证码......

public async Task<IActionResult> Registration(RegistrationViewModel vm) {
    if (ModelState.IsValid) {
        // Create registration for user
        var regData = createRegistrationData(vm);
        _repository.AddUserRegistrationWithGroup(regData);

        var claims = new List<Claim> {
            new Claim(ClaimTypes.NameIdentifier, regData.UserId.ToString())
        };
        var ident = new ClaimsIdentity(claims);
        var principal = new ClaimsPrincipal(ident);

        await HttpContext.SignInAsync(principal); // FAILS HERE

        return …
Run Code Online (Sandbox Code Playgroud)

c# nunit-3.0 asp.net-core-2.0

14
推荐指数
1
解决办法
2720
查看次数

在.NET Core控制台应用程序中将app.config文件与NUnit3一起使用

环境:

我的解决方案中目前有三个项目:

  • .NET Standard 2.0库,其中包含一些我想测试的代码。
  • 一个.NET Core 2.2控制台应用程序,它引用该库以确保其正常工作。
  • 通过使用VS中的“ NUnit测试项目”模板创建的.NET Core 2.2控制台应用程序。

我的测试项目中的依赖项全部来自NuGet:

  • Moq版本=“ 4.10.1”
  • nunit“ Version =” 3.11.0“
  • NUnit.ConsoleRunner“ Version =” 3.10.0“
  • NUnit3TestAdapter“ Version =” 3.13.0“
  • Microsoft.NET.Test.Sdk“ Version =” 16.0.1“

问题:

.NET标准库依赖于任何使用它的应用程序中存在的app.config文件。它使用ConfigurationSectionConfigurationElement属性将值映射到类,与以下答案非常相似:具有嵌套集合的自定义配置节

.NET Core控制台应用程序中包含一个app.config文件,该库能够很好地解析出其中的值并使用它们。好极了。

另一方面,NUnit控制台应用程序具有相同的app.config文件,但是该库似乎看不到它。一旦尝试使用ConfigurationManager.GetSection("...")它读取值,就会返回null

有人在这样的环境中获得过app.config文件与NUnit3一起工作吗?


我尝试过的

看起来它支持配置文件,但我不知道,如果文档指的是一些特殊的NUnit的配置文件或app.config文件。

  • 我尝试将app.config重命名为my_test_project_name.dll.config
  • 我将配置文件“复制到输出目录”设置为“始终复制”
  • 我尝试了所有可能想到的类似名称(app.config,App.config,my_test_project_name.config,my_test_project_name.dll.config等)

在到目前为止编写的一个测试中,我还尝试了一些尝试,尝试以某种方式设置配置文件,例如使用建议AppDomain.CurrentDomain.SetData()(没有用,可能是因为NUnit3不支持AppDomain):

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Path\To\My\Tests\my_test_project_name.dll.config");
Run Code Online (Sandbox Code Playgroud)

尽管NUnit存储库中有一些测试似乎表明可以在NUnit3中使用配置文件,但是该特定测试文件仅在.NET 4.5演示项目中引用,而不在.NET Core演示项目中引用。

c# nunit app-config nunit-3.0 .net-core

14
推荐指数
2
解决办法
794
查看次数

如何修复无法加载文件或程序集'nunit.engine,Version = 3.7.0.0

我有一个使用NUnit运行单元测试的单独测试项目的webappliction.当我的测试项目试图发现测试时,我遇到以下异常:

An exception occurred while test discoverer 'NUnit3TestDiscoverer' was loading tests. Exception: Could not load file or assembly 'nunit.engine, Version=3.7.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

这当然是一个非常常见的错误,但是我无法在任何地方找到对此特定程序集的引用,或者其他依赖项实际上导致了该问题.另一件事是我目前已经3.9.0安装了NUnit而不是上面提到的3.7.0.我已经尝试清理和重建解决方案并恢复所有Nuget包并清除obj目录也没有帮助.

c# nunit visual-studio nunit-3.0

13
推荐指数
1
解决办法
5970
查看次数

AutoFixture 是否支持 .NET6 的“DateOnly”?

我在使用 AutoFixture 构造 DateOnly 变量/字段时遇到异常。(TimeOnly 的构建工作正常)

AutoFixture.ObjectCreationExceptionWithPath :AutoFixture 无法从 System.DateOnly 创建实例,因为创建意外失败并出现异常。请参考内部异常来排查失败的根本原因。

AutoFixture、AutoFixture.NUnit3 nugets 版本:4.17.0

using AutoFixture;
using AutoFixture.NUnit3;
using NUnit.Framework;

namespace UnitTests
{
  [TestFixture]
  public class AutoFixtureCreateTests
  {
    private readonly Fixture fixture = new();

    [SetUp]
    public void Setup()
    {
      var date = fixture.Create<DateOnly>();  //fails
      var time = fixture.Create<TimeOnly>();  //works fine
    }

    [Test, AutoData]
    public void CreateString(string str) { } //works fine

    [Test, AutoData]
    public void CreateDateOnly(DateOnly date) { } //fails

    [Test, AutoData]
    public void CreateTimeOnly(TimeOnly time) { } //works fine …
Run Code Online (Sandbox Code Playgroud)

c# autofixture nunit-3.0 .net-6.0 dateonly

12
推荐指数
1
解决办法
3415
查看次数