Nunit 带有许可证文件的单元测试产品

Nunit 带有许可证文件的单元测试产品,nunit,Nunit,我开始开发一种使用许可证文件的产品。需要读取(和验证)这些文件才能使应用程序工作。这会导致单元测试中出现一些问题,如果没有适当的许可证,它会引发异常 我们正在使用NUnit,我需要做的是: 在运行测试之前,将许可证文件复制到卷影复制的目录中 将工作目录设置为原始生成输出文件夹,以便文件名在临时测试文件夹中仍然有效 我知道在单元测试中通常应该避免文件访问,但在重构开始之前,我们需要进行单元测试,所以我需要这样做。不需要回答您的问题,但通常当我们为软件产品购买许可证时,它通常附带某种类型的支持。

我开始开发一种使用许可证文件的产品。需要读取(和验证)这些文件才能使应用程序工作。这会导致单元测试中出现一些问题,如果没有适当的许可证,它会引发异常

我们正在使用NUnit,我需要做的是:

  • 在运行测试之前,将许可证文件复制到卷影复制的目录中
  • 将工作目录设置为原始生成输出文件夹,以便文件名在临时测试文件夹中仍然有效

我知道在单元测试中通常应该避免文件访问,但在重构开始之前,我们需要进行单元测试,所以我需要这样做。

不需要回答您的问题,但通常当我们为软件产品购买许可证时,它通常附带某种类型的支持。打电话问问供应商是否有他们推荐的解决方案可能不是个坏主意。

我认为您的测试目标太高了,您可以为更低的功能编写测试。一次全面的测试并不是一个很好的方法,尽管我认为这是一个开始。尝试平衡尝试使此测试正常运行所花费的时间与测试更小、目标更明确的工作单元所花费的时间。

您需要编写一个模拟类来替换正在读取许可证文件的类。您可以使用最小起订量来实现这一点。

我建议您从阅读本书开始:

它会让你深入了解如何解决这类问题。将有一些级别的更改,以使此类代码可测试,这将不得不在不进行测试的情况下进行,但要尽可能少地进行更改,并非常小心地进行更改

在您的情况下,由于注入假读取许可证的类太过复杂,因此您可以更改验证许可证文件的类,以便从单个方法启动单个方法中的实际验证逻辑,该方法告诉类的其余部分许可证正常,并使该方法虚拟,然后使用重写该方法的子类进行测试,以假装它验证了该文件

然后,一旦对该类进行了一些测试,就可以转储该方法和子类,以支持正确注入的类


(编辑以响应验证非常复杂的事实)。

禁用NUnit的卷影复制功能将使测试运行在与内置测试相同的输出文件夹中。但这也会阻止新的构建(因为文件正在使用中)。在我看来,这是一个糟糕的解决方案,但并非如此。

听起来他是产品的所有者,所以我不确定这是否可行。多米尼克是对的,我为创建应用程序的公司工作。为什么投反对票?在我回答的时候,问题中没有任何东西表明他是我的老板?我投了反对票,我通常不会证明我的投票是正确的,但这次原因很明显。这是“答案不是回答问题”的标准否决票。我希望你没有被冒犯?这当然不是我的本意。事实上,许可证的阅读水平非常低。许可证文件的创建方式使您可以“随心所欲地挑选”并只为想要的功能付费。代码库的某些部分不需要我们已经测试过的许可证,但这只是一小部分。一旦我们有了更好的测试套件,这将是第一个改进。我想确保重构不会破坏任何东西。我想你是在说我想做的事根本做不到?我不确定能不能做到。我想我们暗示的是,你创建的冒烟测试比单元测试更多,因为它是一个10000英尺的测试视图,你得到的唯一反馈是它是否破坏了?你不会得到它在哪里破坏的信息。验证逻辑是巨大而复杂的。即使按照你的建议去做也是一个巨大的飞跃。我只想复制一个文件。“认为它会很简单是一个很大的错误。”mizipzor,但你们能通过一个方法实现对那个逻辑的调用吗?如果是的话,那么代码的其余部分在后面的位置就无关紧要了。可以重写该单一方法以避免测试中的行为。