问题标签 [unit-testing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
44685 浏览

unit-testing - 你如何模拟一个密封类?

模拟密封类可能会很痛苦。我目前喜欢使用适配器模式来处理这个问题,但有些东西总是让人感觉很奇怪。

那么,模拟密封类的最佳方式是什么?

Java 答案非常受欢迎。事实上,我预计 Java 社区处理这个问题的时间会更长,并且可以提供很多东西。

但这里有一些 .NET 意见:

0 投票
24 回答
10015 浏览

unit-testing - 如何让初级程序员写测试?

我们有一个初级程序员,他根本没有编写足够的测试。
我必须每两个小时唠叨他一次,“你写过考试吗?”
我们尝试过:

  • 表明设计变得更简单
  • 展示它可以防止缺陷
  • 让它成为一种自我的事情,只说糟糕的程序员不会
  • 这个周末有 2 个团队成员必须来上班,因为他的代码有一个 NULL 引用,而他没有测试它

我的工作需要高质量的稳定代码,而且通常每个人都“明白”并且没有必要推动测试。我们知道我们可以让他编写测试,但我们都知道有用的测试是在你投入其中时编写的。

你知道更多的动机吗?

0 投票
4 回答
1773 浏览

unit-testing - 您如何测试/更改未经测试和不可测试的代码?

最近我不得不在旧系统上更改一些代码,其中并非所有代码都有单元测试。
在进行更改之前,我想编写测试,但是每个类都创建了很多依赖项和其他反模式,这使得测试变得非常困难。
显然,我想重构代码以使其更易于测试、编写测试然后更改它。
你会这样做吗?或者您是否会花费大量时间编写难以编写的测试,这些测试将在重构完成后大部分被删除?

0 投票
15 回答
11448 浏览

unit-testing - 你用什么来对你的 Web UI 进行单元测试?

我目前工作的公司正在使用Selenium对我们的用户界面进行联合测试。你用什么来对你的 Web UI 进行单元测试,你觉得它有多有效?

0 投票
4 回答
873 浏览

c++ - Testing a function that throws on failure

What is the best way of testing a function that throws on failure? Or testing a function that is fairly immune to failure?

For instance; I have a I/O Completion Port class that throws in the constructor if it can't initialise the port correctly. This uses the Win32 function of CreateIoCompletionPort in the initialiser list. If the handle isn't set correctly - a non-null value - then the constructor will throw an exception. I have never seen this function fail.

I am pretty certain that this (and other functions like it in my code) if they fail will behave correctly, the code is 50 lines long including white-space, so my questions are

a) is it worth testing that it will throw
b) and if it is worth testing, how to?
c) should simple wrapper classes as these be unit-tested?

For b) I thought about overriding CreateIoCompletionPort and passing the values through. In the unit test override it and cause it to return 0 when a certain value is passed in. However since this is used in the constructor then this needs to be static. Does this seem valid or not?

0 投票
8 回答
36169 浏览

php - 按特定顺序运行 PHPUnit 测试

有没有办法让 a 内部的测试TestCase按特定顺序运行?例如,我想将对象的生命周期从创建到使用到销毁分开,但我需要确保在运行其他测试之前先设置对象。

0 投票
10 回答
15227 浏览

unit-testing - 单元测试执行速度(每秒多少次测试?)

你的单元测试目标是什么类型的执行率(每秒测试 # 个)?对于单个单元测试来说,多长时间太长了?

我很想知道人们是否有任何特定的阈值来确定他们的测试是否太慢,或者只是当长时间运行的测试套件的摩擦变得更好时?

最后,当您决定测试需要更快地运行时,您使用什么技术来加快测试速度?

注意:集成测试显然又是另一回事了。我们严格来说是需要尽可能频繁地运行的单元测试。


回应综述:感谢迄今为止的出色回应。大多数建议似乎是不要担心速度——专注于质量,如果它们太慢,就选择性地运行它们。具有特定数字的答案包括每次测试的目标是 <10ms,最多 0.5 和 1 秒,或者只是将整个通常运行的测试套件保持在 10 秒以下。

不确定当它们都有帮助时将其标记为“已接受的答案”是否正确:)

0 投票
20 回答
58131 浏览

unit-testing - 集成测试和单元测试有什么区别?

我知道单元测试和集成测试的所谓教科书定义。我很好奇的是什么时候应该编写单元测试......我将编写它们以涵盖尽可能多的类集。

例如,如果我有一个Word类,我将为该类编写一些单元测试Word。然后,我开始编写我的Sentence类,当它需要与Word类交互时,我会经常编写我的单元测试,以便它们同时测试Sentence……Word至少在它们交互的地方。

这些测试是否本质上成为集成测试,因为它们现在测试这 2 个类的集成,还是只是一个跨越 2 个类的单元测试?

一般来说,由于这条不确定的路线,我很少会真正编写集成测试......或者我正在使用成品来查看所有部分是否正常工作实际集成测试,即使它们是手动的并且很少重复超出范围每个单独的功能?

我是否误解了集成测试,或者集成测试和单元测试之间真的只有很小的区别?

0 投票
6 回答
3676 浏览

c# - 深度克隆的单元测试

假设我有一个复杂的 .NET 类,其中包含许多数组和其他类对象成员。我需要能够生成该对象的深度克隆——所以我编写了一个 Clone() 方法,并使用简单的 BinaryFormatter 序列化/反序列化来实现它——或者我可能使用其他一些更容易出错的技术进行深度克隆我想确保经过测试。

好的,所以现在(好的,我应该先完成它)我想编写涵盖克隆的测试。该类的所有成员都是私有的,而且我的架构非常好(!),我不需要编写数百个公共属性或其他访问器。该类不是 IComparable 或 IEquatable,因为应用程序不需要它。我的单元测试在生产代码的单独程序集中。

人们采用什么方法来测试克隆的对象是否是好的副本?您是否为该类编写(或在发现需要克隆后重写)所有单元测试,以便可以使用原始”对象它的克隆来调用它们?如果部分克隆不够深,您将如何测试 - 因为这只是一种问题,可能会在以后给查找错误带来可怕的后果?

0 投票
8 回答
7395 浏览

c++ - 我应该如何对代码生成器进行单元测试?

我知道这是一个困难且开放式的问题,但我想我会把它扔到地板上,看看是否有人有任何有趣的建议。

我开发了一个代码生成器,它将我们的 python 接口与我们的 C++ 代码(通过 SWIG 生成)相结合,并生成将其公开为 WebServices 所需的代码。当我开发这段代码时,我是使用 TDD 完成的,但我发现我的测试非常脆弱。因为每个测试本质上都想验证对于给定的输入代码位(恰好是 C++ 标头)我会得到给定的输出代码位我编写了一个小引擎,它从 XML 输入文件中读取测试定义并生成测试来自这些期望的案例。

问题是我根本不敢修改代码。那以及单元测试本身是a:复杂和b:脆弱的事实。

所以我试图想出解决这个问题的替代方法,这让我感到震惊,我可能是以错误的方式解决它。也许我需要更多地关注结果,IE:我生成的代码是否真正运行并执行我想要的操作,而不是代码看起来像我想要的那样。

有没有人有类似的经历,他们愿意分享?