【问题标题】:c++ unit testing with dependency and file writing具有依赖和文件写入的 c++ 单元测试
【发布时间】:2021-02-28 08:32:31
【问题描述】:

我是一名学生,是单元测试的新手。我在编写项目时对测试问题感到困惑。

我有三个函数A()B(string file)C()A() 用于初始化,它创建一个目录temp 来存储文件。 B(string file) 将文件写入tempC()temp 中的当前文件转移到另一个地方并标记这些文件。它们通常按以下顺序调用:

         | - - - - - - - - - - - - -
        \ /                        |
A - - -> B (multiple times) - - -> C

(这三个函数有点像版本控制系统中的命令initaddcommitgit

事情是这样的:

  1. 我已经编写了A() 的测试和实现。在testB() 中我需要初始化,所以我调用A()。虽然经过测试,但似乎这是一个糟糕的选择。我应该怎么办?我应该在testB() 中自己创建目录temp 吗?
  2. 如果文件已被C() 标记,那么B(string file) 应该什么都不做,如果我们将文件转发给B(string file)。如何测试这种情况?

如果您能提供详细说明,我将不胜感激。

【问题讨论】:

    标签: c++ unit-testing


    【解决方案1】:

    通常每个测试环境都会提供一些东西来初始化测试环境并在测试运行后将其关闭。

    例如,google test/gtest 为每个灯具提供SetUp()TearDown()。在这个夹具中,您可以执行测试 DUT 所需的所有初始化和关闭功能。

    顺便说一句:从我的角度来看,如果它们是相关的,那么一次测试所有 3 个函数是绝对可以接受的。即使有些人将其称为集成测试,它仍然在做你想做的事。它会测试您的代码并检查它是否按预期工作。

    【讨论】:

    • 谢谢。你的意思是我可以在Setup() 中打电话给A()?在测试中访问实际文件是否合适?据说会很慢。
    • @seineo:我们没有说“Thangs”,而是点击“支付”按钮 :-) 如果答案满足您的需求,请接受。你的问题:如果你需要访问文件来测试你的功能,你必须这样做。如果测试需要更长的时间,您可以考虑使用短文件,以减少访问时间。但是,如果需要时间来测试,那就需要时间。您可能决定只在夜间构建上运行一些测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多