Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 将公共代码重构成单独的类后,单元测试是什么_Unit Testing - Fatal编程技术网

Unit testing 将公共代码重构成单独的类后,单元测试是什么

Unit testing 将公共代码重构成单独的类后,单元测试是什么,unit-testing,Unit Testing,假设我有两门课,每门课都经过全面测试。但是存在重复,因此我将公共代码重构为一个新类。我应该对那个新类进行单元测试吗?如果是,怎么做 以下是我可以看到的选项: 不要对新类进行单元测试(它已经通过原始测试进行了全面测试) 将原始测试复制并粘贴到新的测试类 将原始测试移动到新的测试类,并用模拟替换原始测试 保留原始测试,但在新测试类中编写更多细粒度测试 如果是我的话,我会给这个新类一套自己的单元测试。这些测试将是以前针对相同代码运行的测试的复制+粘贴 尽管您在重复工作,但从长远来看,您需要考虑这个新类

假设我有两门课,每门课都经过全面测试。但是存在重复,因此我将公共代码重构为一个新类。我应该对那个新类进行单元测试吗?如果是,怎么做

以下是我可以看到的选项:

  • 不要对新类进行单元测试(它已经通过原始测试进行了全面测试)
  • 将原始测试复制并粘贴到新的测试类
  • 将原始测试移动到新的测试类,并用模拟替换原始测试
  • 保留原始测试,但在新测试类中编写更多细粒度测试

  • 如果是我的话,我会给这个新类一套自己的单元测试。这些测试将是以前针对相同代码运行的测试的复制+粘贴


    尽管您在重复工作,但从长远来看,您需要考虑这个新类可能会发生怎样的变化,在新的单元测试类/夹具中进行这些测试对您来说会更干净。

    如果是我,那么我会给新类一套自己的单元测试。这些测试将是以前针对相同代码运行的测试的复制+粘贴


    尽管您在重复工作,但从长远来看,您需要考虑这个新类可能会如何更改,并且在新的单元测试类/装置中进行这些测试对您来说会更干净。

    如果您的重构类被现有测试覆盖,您可能还可以


    看看你的选择,我也会做第四件事。如果你做了一些重构,你可能会做一些比以前更通用的东西。在这种情况下,您可以以通用方式测试通用功能。因此,如果重构后的解决方案更通用,我会选择4。如果只是为了让代码变得枯燥,我可能会做1。

    如果您的重构类被现有的测试覆盖,那么您可能还可以

    看看你的选择,我也会做第四件事。如果你做了一些重构,你可能会做一些比以前更通用的东西。在这种情况下,您可以以通用方式测试通用功能。因此,如果重构后的解决方案更通用,我会选择4。如果只是将代码移动到干燥状态,我可能会执行1

    但是存在重复,因此我将公共代码重构为一个新类

    我认为这意味着两个旧类现在继承了新类的公共行为。如果是这样的话,那么旧的测试用例应该已经在测试常见的行为,并且可能没有必要编写单独的测试

    如果不是这样的话(比如,如果您正在创建一个实用程序类,其方法由两个原始类调用),那么我可能会将测试移动到它们自己的单元测试类中,这样它们只需要位于一个位置

    但是存在重复,因此我将公共代码重构为一个新类

    我认为这意味着两个旧类现在继承了新类的公共行为。如果是这样的话,那么旧的测试用例应该已经在测试常见的行为,并且可能没有必要编写单独的测试


    如果不是这样的话(比如如果你正在创建一个实用程序类,它的方法由两个原始类调用),那么我可能会将测试转移到它们自己的单元测试类中,这样它们只需要在一个地方。

    但是如果将来的重构破坏了测试,我需要修复的测试数量将增加一倍,很抱歉,我以为您要从其他类中删除重构代码,只在新类中留下下面提到的@Bill代码。我强烈建议这样做,而不是留下重复的代码。我想说的是:如果我将测试方法从旧的测试类复制到新的测试类,并且将来对测试中的新类进行重构会破坏一些东西,那么新的测试类和旧的测试类都需要修复。但是如果将来的重构破坏了测试,我需要修复的测试数量将增加一倍,很抱歉,我以为您要从其他类中删除重构代码,只在新类中留下下面提到的@Bill代码。我强烈建议这样做,而不是留下重复的代码。我想说的是:如果我将测试方法从旧的测试类复制到新的测试类,并且将来对测试中的新类进行重构会破坏一些东西,那么新的测试类和旧的测试类都需要修复。wrt#1,我担心初级工程师可能会认为“有时跳过测试也可以”,并遵循这种模式,没有意识到这个案例是独一无二的,因为它已经被测试为一个有效的关注点。但是,必须让初级工程师明白,之所以这样做没有问题,是因为包含了重构代码。每当我做类似的事情时,我都会单独测试重构,fwiw。这样,如果重构后的代码增长,我已经有了测试来保留我锁定的内容,还有一个放置新测试的地方。我尽量不复制和粘贴。wrt#1,我担心初级工程师可能会认为“有时候跳过测试没什么问题”,并遵循这种模式,没有意识到这种情况是独特的,因为它已经测试过了。但是,必须让初级工程师明白,之所以这样做没有问题,是因为包含了重构代码。每当我做类似的事情时,我都会单独测试重构,fwiw。这样,如果重构后的代码增长,我已经有了测试来保存我锁定的内容,还有一个放置新测试的地方。我尝试从不复制和粘贴。这是一个实用程序类。原来的类现在实际上是一个单行程序,并将所有工作委托给实用程序类。所以你不会测试原始的(单行程序)类,而只关注实用程序类吗?@Brad:是的,如果你只是将它作为一个实用程序使用,我会直接测试它一次。我想我会