问题标签 [integration-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.
unit-testing - 您是否更专注于单元、集成或验收测试?
我最终参加的大多数演出要么很少或没有单元测试。通常,被描述为单元测试的内容实际上是集成测试,并且很少从开发人员的机器上运行。我通常通过宣传两者之间的区别来开始我的布道,并尝试让人们编写非常集中的单元测试并将集成测试留到以后,即当有足够多的人编写单元测试时,我们可以“继续”编写集成测试。验收或系统级测试通常由开发人员手动处理,然后由 QA 部门处理。
我的问题是,在敏捷环境之外工作时,您在单元、集成和验收测试中投入了多少精力,您认为最大的价值是什么?
unit-testing - 用于命令行集成测试的 PHPUnit
最近,我开始研究我们产品中的 Email2SMS 功能。当我加入该项目时,该组件的单元测试代码覆盖率为零。遗留代码。
自从我开始研究它以来,我一直在使用测试优先的方法。但是代码质量非常低。很难将它拆分并通过单元测试来测试小块,所以我决定编写集成测试。
有一个 php 脚本,它接受一些消息信息,在数据库中搜索用户并保存一些信息,如果一切正常。
是坏还是不好?你将如何解决这个问题?
performance - 进行 TDD 时的性能测试最佳实践?
我正在做一个非常需要一些性能调整的项目。
如果我的优化没有提高程序的速度,我该如何编写失败的测试?
详细说明一下:
问题不在于发现要优化哪些部分。我可以为此使用各种分析和基准测试工具。
问题在于使用自动化测试来证明特定优化确实具有预期的效果。如果我以后可以使用测试套件来发现可能的性能回归,那也是非常可取的。
我想我可以运行我的分析工具来获取一些值,然后断言我的优化代码会产生更好的值。然而,明显的问题是基准值不是硬值。它们因当地环境而异。
那么,总是使用同一台机器进行这种集成测试的答案是什么?如果是这样,您仍然必须考虑结果中的一些模糊性,因为即使在相同的硬件上,基准测试结果也可能会有所不同。那么如何考虑到这一点呢?
或者答案可能是保留旧版本的程序并比较前后的结果?这将是我的首选方法,因为它主要与环境无关。有没有人有这种方法的经验?我想只有在最新版本的性能至少与前一个版本一样好的情况下,如果所有测试都可以通过,则只需要保留一个旧版本。
sql-server - 建立多样化的数据库测试环境
我正在编写一些需要针对一系列不同数据库产品工作的代码。
- mysql
- Sql Server 2000 到 2008
- PostgreSQL
- 甲骨文 9i & 10g
- Jet 4.0(MS 访问)
- MSDE
- Sybase Adaptive Server 无处不在
- Sybase Sql Anywhere
- 进展 OpenEdge
作为持续集成构建的一部分,我们需要针对每个数据库产品运行一组通用集成测试。
我确信其他人不得不建立类似的测试环境,我想利用其中的一些智慧——你最终使用什么策略,什么效果好或效果不好?
一些想法:
- 每个产品都有单独的虚拟机,每个都分配少量内存(在某些情况下更易于管理,或者我们对各个产品的设置略有不同)。
- 所有产品的几个虚拟机甚至一个虚拟机(例如,可能是一个用于 postgresql 和 mysql 的 ubuntu 机器,以及一个用于其余产品的 windows 2008 服务器机器) - 我喜欢一两个虚拟机,因为它更便携运行测试的环境,即在路上/场外时,因为我的笔记本电脑可能会在运行 8 或 10 个小型 VM 时停止运行。
最后,您是如何解决其中一些商业产品(如 Oracle 或 Progress OpenEdge)的高昂成本的,并且之前的版本是否仍然可用,即是否有免费的“单一开发者”版本可用,或者购买这些产品的更便宜的途径?
integration-testing - 集成测试 - 您在什么级别进行测试以及如何设置?
我刚刚在我的应用程序中遇到了一个错误,可能已经被一些集成测试捕获了,所以我认为是时候写一些了!
我的问题与这些测试的设置有关,以及您在代码的哪一层运行测试。
设置
考虑到我应该有很多集成测试,我不想为每个测试创建和删除一个测试数据库,这会非常慢(即使它是内存中的 SqlLite)。我的想法是:
- 在我的开发数据库旁边有一个测试数据库
- 在测试之前,运行一些重置脚本,它将正确设置我的模式并插入任何必要的数据(不是特定于测试用例)
- 只需使用这个测试数据库,就好像它是真正的数据库一样。
但是,我必须在每个 [Setup] 中运行我的 Fluent NHib 配置似乎非常浪费。这很难吗?我在这里有什么选择?
我的会话当前包含在 UoW 模式中,分别在 begin_request 和 end_request(MVC Web 应用程序)上执行创建和销毁。我应该修改它以与测试一起解决这个问题吗?
测试
在实际编写一些测试时,我应该怎么做?
我应该从可能的最高级别(我的 MVC 控制器操作)还是从最低级别(存储库)进行测试。
如果我测试最低,我将不得不手动对所有数据进行硬编码。这将使我的测试对代码的更改变得脆弱,并且也不能代表运行时代码中实际发生的情况。如果我在最高级别进行测试,我必须运行我的所有 IoCC 设置,以便注入依赖项并让整个事情发挥作用(再次,在每个 [SetUp] 中重复这个?)
呸!我迷路了,有人指出我正确的方向!
谢谢
.net - 集成(Selenium)测试后回滚数据库
有没有人对从 Selenium 等集成测试框架中回滚数据库事务的最佳实践或首选方式有任何建议?
这是我们目前的情况:我们有一个带有许多单元测试的 .net Web 项目,这些单元测试在我们的单元测试环境中运行良好 - 每个测试都继承一个父类,它在 [SetUp] 中打开一个事务,并在 [SetUp] 中回滚事务[拆解]。每次测试后,我们的单元测试数据库都会恢复到原始状态。
但是,一旦我们进入集成环境,情况就会发生变化。我们的持续集成服务器会自动编译我们的提交并将它们推送到测试服务器,以便服务器始终运行在最新的代码上。我们还设置了一个 Selenium 实例来自动化用户与站点的交互。selenium 测试基本上与现有的 Selenium 服务器通信,并告诉服务器诸如“启动浏览器并转到http://testsite/TestPage.aspx - 将文本 'abc' 输入带有 id 'def' 的表单字段 - 断言新页面包含文本“xyz””
每个测试都以与我们的普通单元测试类似的方式运行,但有一个重要的例外:Selenium 所做的任何更改都是在完全不同的线程/应用程序中完成的,因此我们不能(我*认为我们不能,至少)在测试拆解中回滚它们。
我们还没有为此找到一个好的解决方案。现在我们正在使用 SqlCommand 执行 sql 语句来备份数据库,然后在测试结束时,我们将数据库设置为单用户,删除当前数据库并恢复旧副本 - 这不太理想,因为这有效地杀死了附加到数据库的应用程序,并要求我们再次重新初始化应用程序。
这是以前解决过的问题吗?任何建议都会很棒。
谢谢!
unit-testing - 自动化单元测试与自动化集成测试的优缺点是什么?
最近,我们一直在向现有的 Java 应用程序添加自动化测试。
我们有什么
这些测试中的大多数是集成测试,它可能涵盖一系列调用,例如:-
- HTTP 发布到 servlet
- servlet 验证请求并调用业务层
- 业务层通过休眠等做了很多事情并更新了一些数据库表
- servlet 生成一些 XML,通过 XSLT 运行它以生成响应 HTML。
然后,我们验证 servlet 以正确的 XML 响应,并且数据库(我们的开发 Oracle 实例)中存在正确的行。然后删除这些行。
我们还有一些较小的单元测试来检查单个方法调用。
这些测试都作为我们夜间(或临时)构建的一部分运行。
问题
这看起来不错,因为我们正在检查系统的边界:一端是 servlet 请求/响应,另一端是数据库。如果这些工作,那么我们可以自由地重构或弄乱中间的任何东西,并对被测 servlet 继续工作有一定的信心。
这种方法可能会遇到什么问题?
我看不出在单个类上添加更多单元测试会有什么帮助。这不会使重构变得更加困难,因为我们更有可能需要丢弃并重新编写测试?
integration-testing - WatiN test data reset/clean up
I'm wondering how people are currently resetting their data / cleaning up test remnants for their WatiN/Wartir tests?
For example, lets say there's a test to add a user into the system and the username has to be unique. Obviously the first run without any users should work fine, but the second run will fail without manual intervention.
.net - 如何将单元测试与集成测试分开?
我是测试和模拟的新手。我正在尝试测试一个执行计算、调用 DAL 并更新数据库以及管理事务的业务逻辑类。我正在使用模拟来进行单元测试,但是完全集成测试如何适应所有这些。我基本上有完全相同的测试,但使用真正的 DAL 还是我做一些完全不同的事情?
unit-testing - 使用 Visual Studio 测试套件/NUnit 自动化集成测试 MSMQ 的最佳方法是什么?
我想为我正在编写的 MSMQ 应用程序创建一系列自动化单元测试。在我看来,挑战在于如何适应测试方法中的事件处理程序。也就是说,我从测试方法发送了一条消息,并且需要将结果返回给该测试方法,表明该消息已被接收并处理。我不知道如何做到这一点,任何方向都将不胜感激。