在使用 NUnit 时,了解测试在加载和运行时所经历的阶段非常重要。因为我不知道您在每个阶段都在做什么,所以我将从概述这些阶段开始。在您发布一些显示您的工厂类、[SetUp]
方法和实际测试正在做什么的代码后,我将添加到这个答案中。
简而言之,NUnit在运行测试之前加载它们。它实际上可能会为每个负载运行多个测试——这取决于所使用的运行器的类型。例子:
NUnit-console 加载一次测试并运行一次,然后退出。
TestCentric GUI 加载测试一次,然后在您每次选择测试并单击运行时运行它们。它也可以使用菜单选项重新加载它们。
TestExplorer 使用 NUnit 3 测试适配器加载测试,然后在您每次单击运行时运行它们。
理想情况下,您应该编写测试,以便它们可以在任何运行程序下工作。为此,您应该假设它们将为每个负载运行多次。不要在加载时编写代码,您希望每次运行都重复这些代码。如果您遵循此规则,您将获得更强大的测试。
那么...... NUnit 在每个阶段都做了什么?这里是...
正在加载...
[TestCaseSource]
您执行的所有代码。
跑步...
正如您所注意到的,您为任何步骤编写的代码只能依赖于已经执行的步骤。特别是,加载测试时采取的操作不能依赖于运行它的操作。如果您认为“加载”实际上意味着创建将要运行的测试,这是有道理的。
如果您[TestCaseSource]
事先知道要创建什么对象,您应该只调用创建对象的工厂。通常,最好的方法是初始化那些将用于创建对象的参数。然后根据您的目标对象生命周期,[OneTimeSetUp]
这些用于实际创建对象。[SetUp]
这已经足够(也许太多)概括了!如果您发布一些代码,我会在这个答案中添加更具体的建议。