【问题标题】:Unit testing .net project by Asserting Status Code returning通过断言状态码返回单元测试 .net 项目
【发布时间】:2019-10-17 14:37:11
【问题描述】:

我是单元测试的新手,xunit。我正在编写断言状态代码返回的单元测试。这是集成测试范围内的东西还是满足单元测试逻辑?

例如,我断言 get 函数的响应如下:

[Fact]
public async Task MyTest()
{
    SearchParam searchParam = new SearchParam() { };
    var bool= false;
    var bool2 = false;
    var actionResult = await _controller.Myfunction(searchParam, bool, bool2).ConfigureAwait(false);
    var okResult = actionResult.Result as OkObjectResult;
    Assert.True(okResult.StatusCode == 200, "Ok");
}

【问题讨论】:

  • 单独的断言对于集成和单元测试之间的区别并没有多大意义。您是否在模拟控制器的所有依赖项并确保它遵循给定特定输入的正确逻辑流程以获得 200?那么它可能是一个单元测试。控制器操作是否通过所有控制器的服务依赖项执行?那么它可能是一个集成测试。
  • 你能分享你想要单元测试的代码以及测试代码吗?由于信息量有限,无法提出任何建议。
  • 我分享了测试方法的代码。感谢您的帮助

标签: c# .net unit-testing xunit.net


【解决方案1】:

如果该状态代码是通过访问辅助基础架构(发出 Web 请求或类似请求)生成的,那么它应该是一个集成测试。 这是因为二级基础设施可能并不总是启动并运行,这可能会导致测试失败。

单元测试不应该依赖于这些东西。 无论如何,单元测试必须始终是可重现的,并且不得依赖于外部资源。

更新:

单元测试和集成测试通常可以使用与单元测试平台相同的逻辑来完成。 但是,您必须考虑到有资格作为集成测试(见上文)的测试可能由于外部原因而失败。 这意味着您必须以不同的方式处理任一测试的结果。

我强烈建议将您的集成测试放入单独的测试程序集中,如果您在提交时运行构建管道,则该程序集不会执行。

如果您的集成测试因封闭签入环境中的外部因素而失败,它将阻止任何开发人员将更改提交到分支,直到修复了二级基础架构以符合您的测试。 这是您不惜一切代价想要避免的情况,因为它可能会迫使开发人员处于不活动状态,直到您建筑物中另一台服务器的网络问题得到解决。

【讨论】:

  • 是的,状态代码是由另一个服务生成的,这使得这些测试在此上下文中进行集成测试。但是我怎样才能对这些方法使用单元测试逻辑呢?
  • 你可以编写一个测试来发出请求,就像单元测试中的任何其他 act 部分一样,然后在收到的状态代码上 assert请求。就像你已经这样做了。
  • 感谢您澄清单元测试和集成测试之间的差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2012-05-05
  • 2014-08-10
相关资源
最近更新 更多