【发布时间】:2018-07-04 20:54:01
【问题描述】:
我有以下带有 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);
}
}
【问题讨论】:
-
您能否详细说明测试未通过?你有不同的名字吗?有什么名字吗?我不是控制器动作测试方面的专家,但我不确定这是否真的是单元测试材料。只要控制器操作除了返回对象列表之外什么都不做,我宁愿测试您正在使用的
IProvider实现。 -
我发现您发布的代码存在两个问题。首先,
ConsumersController中的Get方法不是async方法。您的单元测试方法将其视为定义为async。第二个问题是我没有看到为您的控制器创建的IProvider<Consumer>模拟或对象。 -
链接的文章涵盖单元测试和集成测试。您能否准确说明您指的是哪一个,因为目前这个问题太宽泛,我们无法为您提供任何有意义的帮助。
标签: c# unit-testing asp.net-core nunit