.net NUnit如何检测测试之间的依赖关系?

.net NUnit如何检测测试之间的依赖关系?,.net,nunit,.net,Nunit,我已经开始了一个项目的工作,我发现一些单元测试依赖于另一个在它之前已经运行过的事实。有没有什么方法可以在不手动运行的情况下检测此类测试?这个项目中有几千个测试,这不是我做的最有趣的事情。如果在文件中定义了测试用例Prerequeste,那么很容易识别。否则,您需要使用试错法来识别此信息。之后,您可以使用测试初始化和测试清理来组织测试。如果在文件中定义了测试用例的先决条件,则很容易识别。否则,您需要使用试错法来识别此信息。之后,您可以使用测试初始化和测试清理来组织测试。我担心NUnit对这个问题没

我已经开始了一个项目的工作,我发现一些单元测试依赖于另一个在它之前已经运行过的事实。有没有什么方法可以在不手动运行的情况下检测此类测试?这个项目中有几千个测试,这不是我做的最有趣的事情。

如果在文件中定义了测试用例Prerequeste,那么很容易识别。否则,您需要使用试错法来识别此信息。之后,您可以使用测试初始化和测试清理来组织测试。

如果在文件中定义了测试用例的先决条件,则很容易识别。否则,您需要使用试错法来识别此信息。之后,您可以使用测试初始化和测试清理来组织测试。

我担心NUnit对这个问题没有任何帮助,尽管我经常想到一些可以检测依赖关系的功能。不过,这是为了未来

现在,我采用的方法如下。我假设使用console runner和NUnit 3.x

  • 将参数
    --workers=0
    添加到命令行,并验证问题是否仍然存在。该设置强制所有测试按顺序运行,排除了问题是由于并行执行造成的可能性,这是另一回事

  • 使用
    --where
    选项选择测试夹具的某些部分。如果你能做到的话,选择一半左右是最好的。如有必要,使用临时名称空间更改使其更容易

  • 如果问题消失,则运行另一半测试

  • 在这一点上,如果你幸运的话,你已经将问题缩小到一半的测试。返回步骤2,细分显示问题的一半。继续使用这种方法,一种二进制搜索的变体,直到您有一个fixture可以使用为止。此时,您应该能够通过检查或调试发现问题

  • 在第四步,我说“如果你幸运的话”。如果你特别不走运,问题可能出在固定装置上。如果装置共享某种状态,尤其是在使用文件系统时,可能会发生这种情况。在这种情况下,您必须尝试不同的测试分区,直到问题出现


  • 这是一个相当乏味的过程,可能需要一段时间。有时,只需通过所有测试寻找依赖性的机会并将其删除就更容易了。理想情况下,测试代码不应该设置对象的状态或外部状态。任何这样做都是可疑的。

    我担心NUnit对这个问题没有任何帮助,尽管我经常想到一些可以检测依赖关系的功能。不过,这是为了未来

    现在,我采用的方法如下。我假设使用console runner和NUnit 3.x

  • 将参数
    --workers=0
    添加到命令行,并验证问题是否仍然存在。该设置强制所有测试按顺序运行,排除了问题是由于并行执行造成的可能性,这是另一回事

  • 使用
    --where
    选项选择测试夹具的某些部分。如果你能做到的话,选择一半左右是最好的。如有必要,使用临时名称空间更改使其更容易

  • 如果问题消失,则运行另一半测试

  • 在这一点上,如果你幸运的话,你已经将问题缩小到一半的测试。返回步骤2,细分显示问题的一半。继续使用这种方法,一种二进制搜索的变体,直到您有一个fixture可以使用为止。此时,您应该能够通过检查或调试发现问题

  • 在第四步,我说“如果你幸运的话”。如果你特别不走运,问题可能出在固定装置上。如果装置共享某种状态,尤其是在使用文件系统时,可能会发生这种情况。在这种情况下,您必须尝试不同的测试分区,直到问题出现


  • 这是一个相当乏味的过程,可能需要一段时间。有时,只需通过所有测试寻找依赖性的机会并将其删除就更容易了。理想情况下,测试代码不应该设置对象的状态或外部状态。任何这样做都是可疑的。

    你说有些人依赖其他人是什么意思?“共享相同的数据?”……一些单元测试依赖于另一个单元测试在它之前已经运行过的事实。”在这种情况下,您拥有的是集成测试,而不是单元测试。真正的单元测试可以以任何顺序运行;他们没有依赖关系。你说有些人依赖其他人是什么意思?“共享相同的数据?”……一些单元测试依赖于另一个单元测试在它之前已经运行过的事实。”在这种情况下,您拥有的是集成测试,而不是单元测试。真正的单元测试可以以任何顺序运行;它们没有依赖关系。没有任何线索,但可能有一些测试运行程序或nUnit设置允许我在单独的AppDomain中运行所有测试,并进行完全初始化。我承认完成它可能需要几个小时,但它可以节省我更多的工作。没有任何线索,但可能有一些测试运行程序或nUnit设置允许我在单独的AppDomain中运行所有测试,并进行完全初始化。我承认完成它可能需要几个小时,但它可以节省我更多的工作。