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,我已经阅读了许多关于stackoverflow的帖子和许多关于单元测试的文章。我只是想弄明白我所理解的是对的 不要测试任何不涉及逻辑的东西。例如:如果服务层中有一个方法只是调用数据访问层中的另一个方法,那么不要测试它 不要测试基本的数据库操作。如果我在DAL中有一个简单的方法在数据库中插入一个对象,比如说“public void save(object object){…}”,并且没有对从服务层接收的对象进行处理,那么不要测试它 我不需要在所有层上验证对象。这意味着对象中的某个字段不应该为nul

我已经阅读了许多关于stackoverflow的帖子和许多关于单元测试的文章。我只是想弄明白我所理解的是对的

  • 不要测试任何不涉及逻辑的东西。例如:如果服务层中有一个方法只是调用数据访问层中的另一个方法,那么不要测试它

  • 不要测试基本的数据库操作。如果我在DAL中有一个简单的方法在数据库中插入一个对象,比如说“public void save(object object){…}”,并且没有对从服务层接收的对象进行处理,那么不要测试它

  • 我不需要在所有层上验证对象。这意味着对象中的某个字段不应该为null,比如用户对象中的emailId,这在JSP(使用JS)进行验证和验证,我不需要测试DAL方法在接收emailId=null时的行为,因为理想情况下它不应该为null,这应该由JS负责


  • 还有什么我不应该测试的呢?

    不要测试任何不会失败的东西

    但更重要的是你的观点

  • 这完全取决于你所说的逻辑。我在映射层上采用了这种方法。我没有测试将属性值从对象A复制到对象B的所有枯燥代码。复制粘贴错误,我复制了一个副本,但错过了另一个副本。大问题。但是它值得所有额外的测试代码吗?取决于应用程序失败时发生的情况。在这种情况下,测试代码是值得的

  • 与第一点类似。因此,保存很好,很简单,但是你怎么知道你把简单的事情做对了呢。把这些搞乱和把业务逻辑弄错一样糟糕

  • 你不想重新测试你已经测试过的东西。但您应该超越单元测试。进行集成和回归测试以及单元测试。当所有的部件都在真空中工作,但放在一起会爆炸,这真的很好

  • 测试是一种平衡行为。如果你真的对它进行了全面的测试,你可能永远也做不到其他任何事情。但是如果你没有对它进行足够的测试,你就会把所有的时间都花在修复bug上。平衡点所在的位置会发生变化。不同类型的项目失败的成本不同。在一些项目上,比如一个了解内部用户的项目,您可能能够轻松快速地运行,但运行多长时间?最终,未经测试的代码中断,需要一段时间才能找到,而您没有取得任何进展


    最好的做法是遵循真正的TDD。不要为了测试而测试。测试作为设计技术。测试,因为它会输出松散耦合的代码。测试,因为在两个上下文(测试和应用程序)中执行代码可以生成更好的代码。一旦你走上了TDD的道路,你就不会问你应该测试什么,不应该测试什么。测试只是编写代码的一部分,而不是一项独立的活动。

    等等,你说的JS是指JavaScript吗?我想你指的是客户端验证?
    在构建网站时,决不能假设客户机验证了任何东西。JavaScript可以被禁用,页面可以被修改或伪造,等等。

    我不同意你的观点。您不应该根据现在编写代码的方式来编写单元测试,但要确保将来,如果其他开发人员更改了代码的某些随机部分,他可以运行这些测试并获得一切正常的信心

    例如,您可能希望测试只调用另一个方法的方法。毕竟,您只关心外部方法的工作原理,而不关心它是如何工作的。如果下一个开发人员更改了外部方法,使其不再那么简单,那么他将错过一个单元测试

    这就是为什么您应该使用这样的工具来确保100%的代码在单元测试中执行

    如果你已经有了可以工作的东西,那么花时间围绕它编写一系列测试可能是不值得的。这里需要注意的是,如果您需要对它或使用它的代码进行更改,那么这些测试是非常宝贵的


    至于不需要测试DAL对无效输入的处理。。。您需要弄清楚您的服务边界是什么。这要看情况而定。如果您无法控制客户端,则需要测试服务器的期望是否得到满足(在某一层)。

    简单回答-无

    复杂答案-你不应该测试你没有时间做的事情。 测试是由一个复杂的计划所驱动的,该计划对所需的和可负担的测试进行了规划,并对软件系统的最重要部分和工作流进行了优先排序。留给测试的时间越多,可以测试的附带案例就越多

    在单元测试中,每个单元,在OOP中,每个类都有自己的测试。使用最小值、最大值、平均用例值简单地测试所有内容,并进行否定测试——如果软件工作正常,则测试必须失败。测试错误处理

    有关该主题的更多详细信息,请参见

    我不进行任何单元测试,因为我希望集成和/或系统测试:

    • 覆盖代码
    • 自动化
    • 作为单元测试使用,并且与单元测试一样有用
    有关详细信息,请参阅

    与您的问题相反,我建议您应该进行单元测试的唯一代码是代码:

    a) 集成和/或系统测试根本不会测试哪一个(如果不是,为什么不?)


    b) 或者,无论出于何种原因,在集成/系统测试之前应该测试哪些(可能是因为您的项目开发是如何并行地分配给多个开发人员的)

    我不确定我是否同意您在回答中提到的任何例外情况

    不涉及逻辑的方法

    即使一个方法只是将其实现委托给一个内部依赖项,验证它是否发生也是非常重要的。我假设您编写代码是有原因的,所以您需要编写一个测试来确保它保持这种状态

    记住,联合国的一个关键好处
    public void Save(Entity entity)
    {
        this.repository.Save(entity);
    }