【问题标题】:How to unit test main() in VisualStudio如何在 Visual Studio 中对 main() 进行单元测试
【发布时间】:2020-01-11 03:12:47
【问题描述】:

有没有简单的方法在 C++ 中的 Visual Studio 2019 中对 main() 进行单元测试?

我已经尝试了 #including a main.h 并从测试中调用 main(),但它“看起来”像是测试的 main() 被调用,从而导致递归。

我想很早就向学生介绍测试(编写代码使测试绿色化),学生将没有(还)函数或类的经验。

仅供参考,我们使用的是 GoogleTest,但可以更改该选择。

【问题讨论】:

  • 你只能有一个入口点,我认为(虽然不是 100% 肯定)所有独立的 C++ 测试运行器都需要自己的入口点(或者需要从 main() 调用它)所以不多那里的选择。似乎最好先向学生解释一个函数是什么,然后测试它。还因为在任何真实环境中 main() 的作用远超过在单个单元测试中的测试,并且无论如何都会在功能上进行拆分?
  • 您可以按照 SDL2 包装 MSVC 的主要功能的方式进行操作,方法是定义一个将其重命名为其他名称的 main 宏。不过,它有自己的蠕虫罐头。
  • 我认为编写一个直接从main 调用的myProgram() 函数不会太费劲。当然,你的学生还不知道函数,但如果你的测试调用main,它也可以调用myProgram(也可以调用main)。这只是更多的脚手架,并且会被学生认可。

标签: c++ visual-studio unit-testing main googletest


【解决方案1】:

main 很特别,因为程序中只能有一个mainmain 也不是你通常单元测试的东西。但是,解决方案相当简单

// the "main" function you can test
int my_main(int argc, char** argv) {
    // ...
}

// your main (the one you dont include for testing
int main(int argc, char** argv) {
    return my_main(argc,argv);
}

学生将没有(还)函数或课程的经验

我对这个策略有疑问。可组合性是单元测试的先决条件。如果您有可以单独测试的小单元,则单元测试是有意义的。在能够对main 进行单元测试之前,需要对有些函数可以调用(和测试)有一个基本的了解。

【讨论】:

    【解决方案2】:

    我建议不要使用这种策略。

    新程序员不会从测试开始。在人们甚至可以考虑测试之前,至少需要将它们介绍给功能。

    虽然在技术上可以测试 main,但我会停下来思考这会发送什么信息。如果这有机会养成坏习惯,那么一开始就不值得这样做。

    明确一点,我不建议学生离开 2 年,直到他们成为专家,然后才考虑测试。不,我只是建议他们在被引入测试之前至少应该了解基础知识并熟悉功能。

    一个重要的步骤,当然是达到可以编写可测试代码的程度,如果没有实际尝试测试代码,你就不会到达那个阶段,然后你就会看到问题出在哪里,所以从这一点开始看来,测试应该在开发过程的早期引入

    【讨论】:

    • “一旦掌握了基础知识......”尝试向 TDD 传播者解释这一点:P
    • 我不是 TDD 传道者,但我确实认为测试应该从一开始就开始,而不仅仅是在你掌握了基础知识之后(如果是这样的话,我将永远无法达到我能做到的地步用 C++ 编写测试)。一个人写的第一个代码应该是一个测试。看来你的意见不同...
    • 有不同的意见对我来说完全没问题 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2012-10-10
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多