TestCaseSource 属性读取现有测试的所有测试数据,即使我们只运行一个测试。



我的要求:我想为单个案例读取多个测试数据,并且所有测试数据的执行应该自行发生。

TestCaseSource 属性提供了这些要求,但不完全是。

使用TestDataSource,它正在获取不需要执行的测试的TestData。如果有 100 个测试并在一个测试上运行,则它正在获取所有测试的 TestData。

需要的解决方案是:在每个测试开始执行时,是否有任何可能的方法可以读取每个测试的测试数据。

最坏情况的解决方案:类下所有测试的单回路相当可观。

如果将测试划分为多个类别,并在基于类别运行测试时,它正在从不同类别获取其他测试的数据。

我是如何实现的:

OleDbConnection 用于与 excel 连接。 对于每个类,使用单独的 Excel 文档。 对于每个测试,使用单独的工作表。 多个测试数据在单独的行中给出。

您所要求的是 NUnit 的一个长期谈论但未实现的功能,我们称之为"动态测试用例"。

"动态"这个名字可能不是最好的选择,因为它可能意味着很多东西,但它是我们一直在使用的。它准确地意味着测试用例的数据不会加载,并且用例本身直到执行点才会生成。有了这样的功能,事情就会按照你想要的方式工作,只为你选择执行的案例加载数据。

但是对于现有的"静态"测试用例(也是一个相当糟糕的名称),在我们选择要运行的测试用例之前,所有用例都会加载。如果您可以想象一个 GUI 运行器,这就是您希望看到的:在执行任何测试之前显示的所有测试。事实上,这就是为什么设计是这样的:支持需要首先显示所有案例的跑步者。

"动态"功能有很多设计问题,没有必要在这里讨论它们。您正在寻找一种可以帮助您的解决方法。

恐怕最普遍的解决方法是让你停止做你正在做的事情。也就是说,推迟与数据库的连接,直到测试类开始执行。这只有在您知道病例的情况下才有可能。这可能等同于您正在谈论的循环方法。

根据您实际运行测试的方式,其他选项可能可用:nunit3 控制台、VS 适配器等。如果您编辑问题以指示适用的内容,我将尝试提出替代方案。

更新(2018年3月14日): 框架接受包设置"LOAD"(全部大写),其值由要运行的测试IList组成。通常,您将使用类的全名或包含多个类的命名空间。

坏消息...目前没有一个运行器支持此选项。我已经在 https://github.com/nunit/nunit-console/issues/384 请随时插话。

最新更新