【问题标题】:Make method return something just for the sake of testing it? [closed]让方法返回一些东西只是为了测试它? [关闭]
【发布时间】:2021-04-22 12:01:12
【问题描述】:

我有一个异步任务方法,它并没有真正返回任何东西,因为它所做的只是迁移一些数据。 但是,我想以某种方式测试该方法,我所能想到的就是使该方法在完成时返回一个布尔值(如果它确实迁移了数据,则为 true,否则为 false),尽管该过程完全没有必要,但它是仅用于 xunit 测试。 这样做是否被认为是不好的做法?或者是否有另一种测试异步任务的方法?

提前谢谢你!

【问题讨论】:

  • 你不测试方法返回,而是测试它做什么。如果它正在迁移数据,那么您设置 before-testdata,运行您的方法,然后检查数据是否符合预期结果。 (如果这不可能,最省力的方法是让方法在出现问题时抛出异常,并测试它是否在不抛出异常的情况下运行)
  • 只测试方法完成后数据是否迁移到应该的地方。或者由于某种原因这是不可能的?同样仅测试返回值是不够的:您的方法可能有一个错误,即使它没有迁移数据,它也会返回 true。
  • 请注意,方法 async Task 正在返回 Task 类型的值,您可以检查它是成功还是失败(抛出异常)
  • 请与我们分享您简化的迁移方法以及您是如何尝试解决测试问题的以及您在哪里卡住了。

标签: c# unit-testing testing


【解决方案1】:

不,不要添加返回值。

如果您正在执行集成测试,您应该实际设置测试数据,运行该方法,并检查数据是否已迁移,例如通过查询数据库或从磁盘读取文件并将其与预期结果进行比较。

如果您正在执行单元测试,您应该模拟或存根保留数据的代码部分,并检查以确保进行了正确的调用(即以正确的顺序和正确的参数调用,给定被测方法的输入)。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多