我很难让我的单元测试彼此独立。例如,我有一个具有两个append方法的链接列表,一个方法接受单个元素并将其追加到列表中,另一个方法接受另一个列表并追加整个列表;但是,如果不使用第一个append方法填充要传入的列表,则无法测试第二个append方法(获取整个列表的方法)。如何将这两种方法的单元测试分离开来?
发布于 2018-11-22 12:15:30
您描述的情况在测试中处处发生:您有一些类或库需要测试。类或库具有某些需要测试的方法/函数,为了测试其中的某些方法/函数,您必须调用该库的其他方法/函数。
换句话说,当按照四个阶段测试模式(设置、锻炼、评估、清理)分解测试时,需要在练习阶段调用类/ lib。但是,有些元素也必须在安装阶段调用,可能在评估和/或清理阶段也是如此,这似乎很烦人。
这是不可避免的:您提到,在列表append函数的设置中,您必须使用单元素append函数。但是,更糟糕的是:您还必须使用list类的构造函数--没有这个类就没有机会逃脱。但是构造函数也可能是错误的..。
当然会发生的是,测试失败(或者错误通过),因为在设置中调用的函数有缺陷。然而,一个适当的测试套件(如注释中所提到的)也应该有其他(称为低级)函数的测试。
例如,您应该有许多测试来检查类的构造函数是否正确工作。如果在某个时候修改构造函数使其成为缺陷,那么在安装阶段使用构造函数的所有测试都不再值得信任。但是,一些测试构造函数本身的测试(因此在练习阶段调用它)现在应该失败。
从测试结果的概述中,您将能够确定测试失败的根本原因。这需要对依赖关系有一定的了解:哪些测试集中在较低级别的方面,哪些是更高级别的测试,因为它们依赖于一些较低级别的功能来工作。
有一些方法可以使这些依赖关系变得更加明显,从而使以后分析测试失败变得更容易--但这些方法都不是必需的:
发布于 2013-09-29 00:26:48
您可以创建一个本身不是单元测试方法的方法,而是为多个测试创建条件,然后执行结果验证。您的实际单元测试方法将调用另一个方法。因此,您可以在多个测试中使用相同的数据集,而不是在测试方法之间引入依赖关系。
我不知道您使用的是哪种语言,但下面是Xcode 5中使用新XCTest框架的Objective的一个示例。我会这样做:
- (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];
}https://stackoverflow.com/questions/19073101
复制相似问题