首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持单元测试独立和独立

保持单元测试独立和独立
EN

Stack Overflow用户
提问于 2013-09-29 00:18:50
回答 2查看 145关注 0票数 1

我很难让我的单元测试彼此独立。例如,我有一个具有两个append方法的链接列表,一个方法接受单个元素并将其追加到列表中,另一个方法接受另一个列表并追加整个列表;但是,如果不使用第一个append方法填充要传入的列表,则无法测试第二个append方法(获取整个列表的方法)。如何将这两种方法的单元测试分离开来?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-22 12:15:30

您描述的情况在测试中处处发生:您有一些类或库需要测试。类或库具有某些需要测试的方法/函数,为了测试其中的某些方法/函数,您必须调用该库的其他方法/函数。

换句话说,当按照四个阶段测试模式(设置、锻炼、评估、清理)分解测试时,需要在练习阶段调用类/ lib。但是,有些元素也必须在安装阶段调用,可能在评估和/或清理阶段也是如此,这似乎很烦人。

这是不可避免的:您提到,在列表append函数的设置中,您必须使用单元素append函数。但是,更糟糕的是:您还必须使用list类的构造函数--没有这个类就没有机会逃脱。但是构造函数也可能是错误的..。

当然会发生的是,测试失败(或者错误通过),因为在设置中调用的函数有缺陷。然而,一个适当的测试套件(如注释中所提到的)也应该有其他(称为低级)函数的测试。

例如,您应该有许多测试来检查类的构造函数是否正确工作。如果在某个时候修改构造函数使其成为缺陷,那么在安装阶段使用构造函数的所有测试都不再值得信任。但是,一些测试构造函数本身的测试(因此在练习阶段调用它)现在应该失败。

从测试结果的概述中,您将能够确定测试失败的根本原因。这需要对依赖关系有一定的了解:哪些测试集中在较低级别的方面,哪些是更高级别的测试,因为它们依赖于一些较低级别的功能来工作。

有一些方法可以使这些依赖关系变得更加明显,从而使以后分析测试失败变得更容易--但这些方法都不是必需的:

  • 在测试代码中,您将对较低级别方面的测试放在文件的顶部,而更依赖的测试则更深入地放在底部。然后,当几个测试失败时,首先看看最接近文件顶部的测试。注意,测试代码中的测试顺序并不一定意味着执行顺序:例如,JUnit并不关心测试方法在测试类中的写入顺序。
  • 正如注释中所建议的那样,您还可以配置测试框架,以便在其他测试之前运行较低级别的测试。
票数 2
EN

Stack Overflow用户

发布于 2013-09-29 00:26:48

您可以创建一个本身不是单元测试方法的方法,而是为多个测试创建条件,然后执行结果验证。您的实际单元测试方法将调用另一个方法。因此,您可以在多个测试中使用相同的数据集,而不是在测试方法之间引入依赖关系。

我不知道您使用的是哪种语言,但下面是Xcode 5中使用新XCTest框架的Objective的一个示例。我会这样做:

代码语言:javascript
复制
- (void)performTestWithArray:(NSArray *)list
{
    NSMutableArray *initialList = ...; // create the initial list you will use with multiple tests
    [initialList addObjectsFromArray:list];
    XCTAssertTrue(testCondition, @"message");
}

- (void)testAddSingleElement
{
    NSArray *array = @[ @"one element" ];
    [self performTestWithArray:array];
}

- (void)testAddList
{
    NSArray *array = @[ @"first element", @"second element", @"third element" ];
    [self performTestWithArray:array];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19073101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档