c# - 测试 Controller Get() 方法的最佳方法

标签 c# unit-testing asp.net-core nunit

我有以下带有 get () 方法的构造函数,我需要通过 NUnit 测试此方法是否正常工作。

public ConsumersController(IProvider<Consumer> provider)
{
  this.provider = provider;
}

/// <summary>
/// Get the list of consumers that you are allowed to see and serve
/// </summary>
/// <response code="200">Returns the consumers you are allowed to see and serve</response>
[HttpGet]
[ProducesResponseType(typeof(IEnumerable<Consumer>), 200)]
[Produces(typeof(IEnumerable<Consumer>))]
[SwaggerResponse((int)HttpStatusCode.OK, Type = typeof(IEnumerable<Consumer>))]
public IEnumerable<Consumer> Get()
{
  return this.provider.GetAll();
}

我根据此链接创建此代码 Testing controller logic in ASP.NET Core但我不知道它是否正确,测试没有通过。 提前致谢。

[TestFixture]
public class ConsumerTest
{
    private readonly HttpClient consumerHttp;

    private readonly ConsumersController consumerControl;

    [Test]
    public async Task Get_ConsumersController()
    {
        var result = this.consumerControl.Get();
        var response = await consumerHttp.GetAsync("http://localhost:9000/consumers");
        response.EnsureSuccessStatusCode();

        var consumerList = JsonConvert.DeserializeObject<IEnumerable<Consumer>>(await response.Content.ReadAsStringAsync());
        var consumerTest = consumerList.First();

        Assert.AreEqual(result.First().Name, consumerTest.Name);
    }
}

最佳答案

感谢您的回答。事实上,它缺少使用 MOQ 库,并且使用 Async 时出现错误。我用这段代码得到了它。

[Test]
public void Get_ReturnsAConsumer_WithAListOfIProvider()
{
  var mockRepo = new Mock<IProvider<Consumer>>();
  mockRepo.Setup(repo => repo.GetAll()).Returns(GetConsumers());

  var controller = new ConsumersController(mockRepo.Object);
  var result = controller.Get();

  Assert.IsAssignableFrom<List<Consumer>>(result);
  Assert.AreEqual(1, result.Count());
}

关于c# - 测试 Controller Get() 方法的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445732/

相关文章:

reactjs - Asp.Net Core 与 react 和 material-ui

c# - 是否可以在 application_start 中使用 fluent migrator?

c# - C# 中的最小起订量和文件/数据保存

angularjs - 设置 ng-htmljs-preprocessor karma 预处理器

java - JMockit 模拟 System.currentTimeMillis()

asp.net - 如何在 ASP.NET Core 应用程序中使用 HttpClient

c# - LINQ 从 String[] 追加到 StringBuilder

c# - 没有装箱的 Marshal.StructureToPtr

c# - 根据用户名计算日期之间所花费的时间

c# - 如何在容器内使用Coverlet运行单元测试覆盖率报告?