我是测试新手。我想知道:


什么是组件测试?
如何编写组件测试用例?

如果可能的话,请通过示例进行解释,以使其对我的理解更加有帮助。

评论

您可以在此处找到有关组件测试的很好的解释。

尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。 -来自评论

#1 楼

组件测试是对特定模块或程序的测试。可以根据为该特定应用选择的生命周期模型而与系统其余部分隔离进行测试。

存根和驱动程序用于进行有效的测试。

下面给出了最佳示例:

假设您正在测试一个应用程序,该应用程序具有3个名为X,Y和Z的模块。
并认为每个模块都依赖于上面,例如Y依赖于X,Z依赖于Y。现在,如果开发人员开发了Y模块,并且如果要对其进行测试,则需要使用存根和驱动程序作为模块X和Z.

基于上述示例,可以轻松为您编写测试用例。

#2 楼

什么是组件测试?


组件测试是一种对应用程序中的每个组件进行单独测试的方法。
组件测试也称为模块,单元或程序测试。 。
查找模块中的缺陷并验证
软件的功能。

为了编写用于组件测试的测试用例,我更喜欢为所有组件制作一个清单,并单独使用状态和评论列以填写测试结果。您也可以按照@jensi suthar的说明准备详细的电子表格,但我更喜欢清单,因为使用非常详细和冗长的文档来进行组件测试可能会变得非常疲惫。


字典含义:
(从Google词典中复制)


单位:
1.单个事物或人被认为是单一而完整的,但也可以构成更大或更多个的单个组成部分
复杂整体。
2.具有特定功能的设备,尤其是构成复杂机构一部分的设备。同义词:组件,零件,部分,元素,
组成部分,细分,部分,段,模块,项目,成员,
成分,因子,特征,块,片段

组件:
1.较大整体的一部分或要素,尤其是机器或车辆的一部分。同义词:零件,零件,零件,成分,元素,
成分;单元,模块,项目;部分,


因此,根据上面给出的定义,这些术语可以根据上下文和个人的理解而互换。

评论


我认为单元测试与组件特别不同。一个单元是故意的一小段代码,而一个组件则由多个单元组成。

–nullsteph
'18 -10-1在14:02

@nullsteph我已经在答案中添加了单词Unit和Component的含义和同义词。我希望这将使您更加清楚为什么组件和单元测试可以是同一件事。

–IAmMilinPatel
18-10-3在2:36

那就是广义的定义。在测试的上下文中,通常将其视为独立的。检查一下:watirmelon.blog/testing-pyramids

–nullsteph
18-10-7在22:24

您引用的这篇文章不错。虽然,对术语的理解始终取决于个人或团队的看法。例如,在这种情况下,单元测试和组件测试对您来说是完全不同的事情。而对我来说,它们是可以互换的术语。因此,我们(您和我)实际上不必同意一件事情/标准/规则,只要参与我们正在从事的项目的利益相关者能够获得要点和期望的结果即可。

–IAmMilinPatel
18-10-8在5:11

以下是供您参考的链接:softwaretestingfundamentals.com/unit-testing、quora.com/…、dzone.com/articles/unit-testing-vs-component-testing-in-lagom

–IAmMilinPatel
18-10-8在5:11

#3 楼

组件测试是一种对应用程序中的每个组件进行单独测试的方法。假设在一个应用程序中有5个组件。分别且有效地测试这5个组件称为组件测试。

我们举一个例子来更好地理解它。

假设有一个包含三个模块的应用程序,分别是模块A,模块B和模块C。

开发人员已经开发了模块B,现在想对其进行测试。但是,为了完全测试模块B,几乎没有功能依赖于模块A,很少依赖模块C。但是尚未开发模块A和模块C。

在这种情况下,要完全测试模块B,我们可以根据需要通过存根和驱动程序替换模块A和模块C。

参考:组件测试

#4 楼

组件测试是指测试那些可以作为独立单元单独测试而不与其他组件(例如模块,程序,对象,类等)集成的测试对象。<​​br />
测试单独的软件组件称为组件测试。

组件测试被视为模块测试,因为我们正在以不同而有效的方式测试每个模块或组件。

假设只有一个项目包含10个组件,并且我们对每个组件的测试均不同于所谓的组件测试。

一组组件是被称为模块测试。

组件测试由程序员在其编写的代码上并在开发环境的支持下进行,例如单元测试结构或调试工具。

组件测试示例:

例如,有两个网页。在其中一个网页中,有许多特定字段,例如用户名,地址,手机号。等等,其中必须输入数据。在另一个(第二个)网页中,也有某些字段可以从第一页转发数据。测试这些单独页面的功能称为“组件测试”。

您可以编写组件测试用例,如下所示的快照格式。



#5 楼

什么是组件测试?

对单独软件组件的测试称为组件测试。

组件测试被视为模块测试,因为我们对每个模块或组件的测试方式不同和有效。

假设只有一个项目包含10个组件,并且我们对每个组件的测试均不同于所谓的组件测试。

组件测试是指我们测试那些可以作为独立单元单独测试而不与其他组件(例如模块,程序,对象,类等)集成的测试对象。
组件测试示例

例如,有两个网页。在其中一个网页中,有许多特定字段,例如用户名,地址,手机号。等等,其中必须输入数据。在另一个(第二个)网页中,也有某些字段可以从第一页转发数据。测试这些单独页面的功能称为组件测试。

进行组件测试后,我们始终会执行集成测试。在由测试人员进行适当的黑盒测试和白盒测试时,首先要完成组件测试。

在组件测试之前,开发人员始终要进行单元测试。在进行适当的单元测试时,开发人员有效地运行了组件的每个功能和方法。

#6 楼

单独的软件组件的测试称为组件测试。

组件测试是指对软件/网站的单个部分进行测试。这可以是程序模块,单个功能等。

例如,如果您的网站有两个页面注册过程。现在假设第二页数据依赖于第一页数据,并且如果开发人员仅完成了第一页的代码,那么测试人员只能测试第一页,因此这称为一个组件测试。

#7 楼

组件测试是一种对应用程序中的每个组件进行单独测试的方法。组件测试也称为模块,单元或程序测试。它会发现模块中的缺陷并验证软件的功能。

在简要介绍存根和驱动程序之前,我应该简要介绍组件测试和集成测试之间的区别。原因是–集成测试中还使用了存根和驱动程序,因此这可能会导致这两种测试技术之间产生混淆。

集成测试技术是一种我们将两个组件顺序组合并测试集成的技术。系统在一起。来自一个系统的数据将遍历到另一个系统,并针对集成系统验证数据的正确性。

与模块测试不同,模块测试是在将单个组件/模块集成到其他组件之前对其进行彻底测试。因此,可以说组件测试是在集成测试之前执行的。

集成和组件都使用存根和驱动程序。

“驱动程序”是用于调用的伪程序。如果调用函数不存在,则是最低模块的功能。

“存根”可以称为代码段,该代码段接受来自顶部模块的输入/请求并返回结果/响应

如前所述,这些组件分别进行了独立测试。因此,组件的某些功能可能取决于当前尚未开发的其他组件。因此,为了测试具有这些“未开发”功能的组件,我们必须使用一些刺激性代理来处理数据并将其返回给调用组件。

示例:

我们现在考虑一个示例,在该示例中,我们需要开发一个“计算器”,以在不同单位(例如,英尺到英寸)之间转换。
我们从“残存” Unit Converter类开始。此“残缺”类包含描述该类以及我们期望它具有的所有方法的注释(适当注释)。所有非void方法均返回适当的默认值,以便可以编译该类。

/ **
*从一个单位转换为另一单位(例如,英寸到英尺)
*
* @作者James Madison大学的David Bernstein教授
* @version 0.1(存根)
* /
公共类UnitConverter
{

/**
 * Default Constructor
 */
public UnitConverter()
{

}


/**
 * Perform a conversion
 *
 * @param value    The number to convert
 * @param from     The units for value (e.g., "inches")
 * @param to       The units to convert to (e.g., "feet")
 * @return         The converted value
 */
public double convert(double value, String from, String to)
{


    return 0.0;
}



/**
 * Get the multiplier needed for a conversion
 *
 * @param from     The units to convert from (e.g., "inches")
 * @param to       The units to convert to (e.g., "feet")
 * @return         What "from" needs to be multiplied by to get "to"
 */
public double getMultiplier(String from, String to)
{

    return 0.0;
}


}

请注意,可以编译和执行这两个类。

下一版本的单位转换器包含一个convert方法的完整实现,但仍然包含getMultiplier方法的存根(已对其进行了少许更改以使其更加有用)。这使我们能够独立于其他方法测试convert方法(使用驱动程序)。

/ **
*从一种单位转换为另一种单位(例如,英寸到英尺)
*
* @作者詹姆斯·麦迪逊大学戴维·伯恩斯坦教授
* @版本0.2(实现转换)
* /
公共类UnitConverter
{

/**
 * Default Constructor
 */
public UnitConverter()
{

}


/**
 * Perform a conversion
 *
 * @param value    The number to convert
 * @param from     The units for value (e.g., "inches")
 * @param to       The units to convert to (e.g., "feet")
 * @return         The converted value
 */
public double convert(double value, String from, String to)
{
    double     result;

    result = value * getMultiplier(from, to);
    return result;
}



/**
 * Get the multiplier needed for a conversion
 *
 * @param from     The units to convert from (e.g., "inches")
 * @param to       The units to convert to (e.g., "feet")
 * @return         What "from" needs to be multiplied by to get "to"
 */
public double getMultiplier(String from, String to)
{

    return 1.0 / 12.0;
}


}

下一个版本的UnitConverter包含getMultiplier方法的实现(尽管不是很好)。

/ **
*从一种单位转换为另一种单位(例如,英寸到英尺)
*
* @作者詹姆斯·麦迪逊大学David Bernstein教授
* @version 1.0(实现的getMultiplier)
* /
公共类UnitConverter
{

/**
 * Default Constructor
 */
public UnitConverter()
{
}


/**
 * Perform a conversion
 *
 * @param value    The number to convert
 * @param from     The units for value (e.g., "inches")
 * @param to       The units to convert to (e.g., "feet")
 * @return         The converted value
 */
public double convert(double value, String from, String to)
{
    double     result;

    result = value * getMultiplier(from, to);
    return result;
}



/**
 * Get the multiplier needed for a conversion
 *
 * @param from     The units to convert from (e.g., "inches")
 * @param to       The units to convert to (e.g., "feet")
 * @return         What "from" needs to be multiplied by to get "to"
 */
public double getMultiplier(String from, String to)
{
    double        multiplier;

    multiplier = 1.0;
    if        (from.equals("inches")) {

        if      (to.equals("feet"))   multiplier = 1.0/12.0;
        else if (to.equals("yards"))  multiplier = 1.0/12.0/3.0;
        else if (to.equals("miles"))  multiplier = 1.0/12.0/3.0/1760.0;

    } else if (from.equals("feet")) {

        if      (to.equals("inches")) multiplier = 12.0;
        else if (to.equals("yards"))  multiplier = 1.0/3.0;
        else if (to.equals("miles"))  multiplier = 1.0/3.0/1760.0;

    } else if (from.equals("yards")) {

        if      (to.equals("inches")) multiplier = 3.0*12.0;
        else if (to.equals("feet"))   multiplier = 3.0;
        else if (to.equals("miles"))  multiplier = 1.0/1760.0;

    } else if (from.equals("miles")) {

        if      (to.equals("inches")) multiplier = 12.0*3.0*1760.0;
        else if (to.equals("yards"))  multiplier = 1760.0;
        else if (to.equals("feet"))   multiplier = 3.0*1760.0;
    }

    return multiplier;
}


要测试此版本的UnitConverter,我们需要修改驱动程序,以便它生成更多的测试用例。在这种情况下,我们使用“白盒(或玻璃盒)测试”(即,我们查看UnitConverter类以识别重要的测试用例),并编写一个驱动程序来测试所有受支持的输入。

/ **
*用于测试UnitConverter类的驱动程序
*
* @作者詹姆斯·麦迪逊大学David Bernstein教授
* @version 2.0
* /
公共类驱动程序
{
/ **
*应用程序的入口点
*
* @param args命令行参数
* /
public static void main(String [] args)
{
双重转换,原始;
int i,j;
字符串从,到;
String []单位= {“英寸”,“英尺”,“码”,“英里”};
UnitConverter计算器;

    calculator = new UnitConverter();

    original  = 10.0;

    for (i=0; i < units.length; i++) {
        for (j=0; j < units.length; j++) {

            from      = units[i]; // This could be outside the inner loop
            to        = units[j];
            converted = calculator.convert(original, from, to);
            System.out.println(original+" "+from+" = "+converted+" "+to);
        }
    }
}


}

这个过程一直持续到UnitConverter的满意版本完成为止。

Bradteli-MSI的高级自动化自动化测试工程师Rick Bradford。