学习使用 NUNIT 对示例微服务进行单元测试并出现错误

问题描述 投票:0回答:1

我刚刚开始在我的 WebApi 项目中使用 Nunit 学习单元测试。

我为我的控制器开发了一个测试用例:

using Microsoft.AspNetCore.Mvc;

namespace HelloService.Controllers
{
[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("hello");
    }
}
}

这个测试

using NUnit.Framework;
using HelloService.Controllers;
using NUnit.Framework.Legacy;
using Microsoft.AspNetCore.Mvc;


namespace HelloService.Tests
{
public class HelloControllerTests
{
   [Test]
public async Task Should_Return_Hello()
{
// Arrange
var controller = new HelloController();

// Act
var actionResult = controller.Get() as 
OkObjectResult;

// Assert
Assert.IsNotNull(actionResult);
Assert.AreEqual("hello", actionResult.Value);
}
}
}

我收到这些错误“断言不包含 IsNotNull 的定义”和“断言不包含 AreEqual 的定义” 任何人都可以帮我解决这个问题吗? 编辑:我将断言更改为经典断言,但是当我执行 dotnet run 时,我遇到了 错误 CS0579:重复 “System.Reflection.AssemblyCompanyAttribute”属性 这个错误。我已经添加了 false 我的 .csproj 文件中的这一行

.net testing nunit
1个回答
0
投票

虽然你没有说你使用的是哪个版本的 NUnit,(*) 我猜它是版本 4。

Assert.AreEqual
Assert.NotNull
是 NUnit 所谓的“经典断言”。它们是 NUnit 断言的第一种形式,并且是 2007 年“基于约束的断言模型”推出之前的唯一形式。如果您正在使用一些文档,其中提到了经典模型,那么这些文档确实非常旧了。

如果由于某种原因您想要使用旧的“Classic”断言,则每次使用时都应该在代码中将“Assert”替换为“ClassicAssert”。或者,您可以安装版本 4 之前的旧版 NUnit,但如果您刚刚学习 NUnit,这似乎很愚蠢。我的建议是首先开始学习新模型。

在这种情况下,你会写

Assert.That(actionResult, Is.Not.Null);
Assert.That(actionResult.Value, Is.EqualTo("hello"));

您可以让 Intellisense 或更新版本的文档指导您进行其他断言。

© www.soinside.com 2019 - 2024. All rights reserved.