应该在哪里测试夹具代码?

软件测试 自动化测试
2022-02-03 14:30:22

我主要在 Windows / .NET 系统中工作。我用 C# 编写了一个测试框架,其中包括一个运行固定装置(任何实现 ITestFixture 接口的东西)的测试工具。这些夹具是我的框架和 SUT(被测系统)之间的接口,有时它们依赖于 SUT 方法或对象。我的框架中没有其他内容取决于 SUT 的代码。我正在测试多个项目,它们之间的关系相对较小,并且随着时间的推移会越来越多地进行测试。

现在,我在 .NET 中有一个测试解决方案,其中包含我所有的测试框架代码。. . 以及所有的装置,以及它们的所有依赖项。结果是一个具有大量依赖项的巨大测试框架解决方案。从长远来看,这似乎不是一个很好的做事方式。

我们正在讨论的另一种选择是让我创建一个“Common.Test”项目,该项目基本上包括固定装置的接口,也许还有一些实用功能。然后,开发人员将包含一个“SUT.Test”项目(其中 SUT 是被测系统的名称),其中包括他们的固定装置并依赖于 Common.Test 项目。夹具将作为其解决方案的一部分进行编译,测试工具将从其 .dll 文件中动态加载夹具。

对于有经验的自动化测试人员来说,这些选项中的任何一个(测试解决方案中具有大量依赖项的夹具,或 SUT 代码中由线束动态加载的夹具)听起来是否比其他选项更好?还有其他我遗漏的选项应该考虑吗?如果您使用固定装置,您的团队会做什么?

2个回答

我个人使用多种方法。

我的所有测试都继承自一个基测试类,它有很多通用对象并包含任何设置和拆卸代码。

我还有一个“观察者”类,我的堆栈的所有层都可以引用它,并且它包含执行所需的任何实用程序类。观察者还用作存储测试数据对象的内存数据存储,而不必在我的层之间上下传递它们。

这种方法允许我强制执行关注点分离,我的测试与实际应用程序的实现方式无关,而不是实际驱动应用程序的底层自动化引擎。

如果你想看看它是在testingstax.codeplex.com上开源的

如果我必须调用外部 dll 并且我想要松散耦合,我会考虑使用 .net 反射动态加载它们。这样我就可以吃蛋糕了:-)

在我的公司中,测试夹具位于一个名为 component_test_tools 的单独文件夹中,它由 DEV 创建和维护。我们的测试用例称为这些装置。当应用程序代码/对象更改并且 DEV 忘记更新相应的夹具时,所有调用这些夹具的测试用例都会失败。DEV 需要确保每当他更改代码和对象时,fixture 也会更新。

这些依赖关系在测试运行中导致了一些无效的失败。测试人员依靠 DEV 来修复我所面临的真正问题。与应用程序代码错误相比,DEV 认为自动化夹具错误的优先级较低,让他们关注这些问题具有挑战性。