如何实际单元测试?和大代码库最有效的方法?

时间:2017-09-16 20:18:35

标签: unit-testing

我没有完全掌握单元测试的概念,它让我对如何以最有效的方式实际解决问题感到困惑。

例如:

  1. void function(){
        if(!object == null){
            //do something
        }
    
        else{
            throw anyexception
        }
    }
    

    是单元测试吗?

  2. derived class/Test class : baseclass
    
    derived_class = new baseclass();
    
    Test_class = new baseclass();
    
    Test_class.Sum();
    

    我是否在单元测试中正确理解它,如果你使类可继承并创建一个测试类来测试所需基类中的每个组件?

  3. 动态调试是不够的,只需单击调试按钮,Visual Studio就会处理并发现所有课程中的所有问题

  4. 给我一个关于如何对大型和小型代码库进行单元测试的示例
  5. 是单位测试必需品吗?

2 个答案:

答案 0 :(得分:-1)

单元测试意味着根据预定义的输入检查代码的特定部分,以确保您的代码正确无误。一个简单的例子:如果你有这样一个功能:

int power(int x, unsigned int n)
{
    int res = x;
    while(n > 1) {
        res *= x;
        n--;
    }
    return res;
}

这种功能的单元测试如下所示:

void test_power()
{
    if(power(5, 2) != 25)
        throw BugDetected{};
    if(power(5, 0) != 1)
        throw BugDetected{};
}

可以以类似的方式测试类。

(当然大型代码库使用框架进行单元测试,这意味着上面的测试看起来可能略有不同 - 这也是一个简单的例子,可以帮助您理解单元测试是什么。我怀疑你的派生类的例子可能会来来自这样一个框架。)

编写代码并不是绝对必要的单元测试,然而,许多人会争辩说,如果没有全面的单元测试,你永远无法确定你的代码是否正确。 (请参阅上面的示例:函数power有一个错误,将通过此单元测试检测到。)

你问:

  

动态调试不够用,只需单击调试按钮,Visual Studio就会处理并发现所有类中的所有问题

对于小块代码,但是,当你的代码非常大时,可以通过这种方式测试所有代码并运气好发现所有可能的极端情况。根据功能的使用方式,调试器可能甚至不会发现有问题:只有您的代码有时会输出错误的结果。

答案 1 :(得分:-1)

这个概念很简单,这意味着您需要有一种测试方法来测试您的“生活”。方法。今天有一个所谓的 T est D 撕裂 D 发展(TDD),你需要首先开发测试,然后你的'生活'方法。这看起来似乎很愚蠢,但这就是概念。当您的生活时,这种测试方法会起什么作用?方法不存在。那么测试就会失败。然后你的下一步就是创建“直播”。方法然后你的测试将通过。你可以使用NUnit框架在visual studio项目中创建单元测试。

'直播'方法

-DLLVM_ENABLE_RTTI=ON

我们有类Math,我们需要设计方法Sum,它接受两个参数来计算它们的总和。测试方法应包含描述性名称您正在测试什么。您在测试方法上方添加[TestMethod()]属性。您实例化Math类的对象并调用Sum方法将结果存储在methodResult变量中。使用预期结果值实例化expectedResult变量,然后调用Assert.AreEqual(expectedResult,methodResult),它是NUnit框架中的嵌入式测试工具,用于比较这两个值。我们可以说测试通过'如果预期和方法结果相等,则使用绿色标记,否则会失败并变为红色。