【问题标题】:How to remove redundancy from my C++ test code如何从我的 C++ 测试代码中删除冗余
【发布时间】:2021-06-30 06:36:01
【问题描述】:

我有一个 cpp 测试文件

#include "pch.h"
#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTests
{
    TEST_CLASS(UnitTests)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            someCommonMethod();

            Assert::AreEqual(add(1, 2) , 3);
        }

        TEST_METHOD(TestMethod2)
        {
            someCommonMethod();
            Assert::AreEqual(add(1, 3), 4);
        }
    };
}

如何删除冗余或将代码提取到类中,以便为我创建的每个 TEST_METHOD 调用 someCommonMethod()。 我浏览了有关 TEST 的文档。

【问题讨论】:

  • 让它成为你的 UnitTest 类的私有函数?
  • @Moia :我可以使用它,但问题是我有不同的测试类,并且在不同的测试类 Test _Method 中需要 someCommonMethod()
  • 所以外部辅助函数或类的集合...
  • 测试代码和普通代码没有什么不同,你可以创建一个头文件(如果合适的话还有实现文件)并将它包含到你的每个测试文件中。

标签: c++ unit-testing


【解决方案1】:

我同意@Alan Birtles 所写的内容。你确实有https://docs.microsoft.com/en-us/visualstudio/test/microsoft-visualstudio-testtools-cppunittestframework-api-reference?view=vs-2019#Initialize_and_cleanup

不过,我会警告不要使用复杂的通用代码。

鉴于以下情况:

TEST_CLASS(UnitTests)
{
public:
    
    TEST_METHOD(TestMethod1LogicalGroupBasedOnFeature1) {}
    TEST_METHOD(TestMethod2LogicalGroupBasedOnFeature1) {}

    TEST_METHOD(TestMethod1LogicalGroupBasedOnFeature2) {}
    TEST_METHOD(TestMethod2LogicalGroupBasedOnFeature2) {}

}
...

如果您发现自己使初始化变得复杂(我什至会考虑 init 中的 1 个“if”语句),请创建一个新类或复制粘贴。

您永远不需要对单元测试代码本身进行单元测试。

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多