- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上周我发现自己不得不开始思考如何重构仅包含单元测试的旧应用程序。我的第一个想法是使用 Cucumber 添加一些组件测试场景,以熟悉业务逻辑并确保我的更改不会破坏任何内容。但那时我与我工作的公司的一位架构师进行了交谈,这让我想知道这是否值得,以及我必须实际测试的代码实际上是什么。
此应用程序有许多不同类型的端点:要调用的其余端点、Oracle 存储过程以及 JMS 主题和队列。它以 war 文件形式部署到 Tomcat 服务器,代理的连接工厂和数据库的数据源在服务器中配置并使用 JNDI 获取。
我的第一个想法是在嵌入式 Jetty 中加载整个应用程序,指向真正的 web.xml,以便加载所有内容,就像从生产环境加载一样,然后模拟连接工厂和数据源。通过这样做,将测试部署应用程序的基础设施的所有连接逻辑。考虑到六边形架构,这似乎需要付出太多努力,因为这些只是逻辑应该仅用于将接收到的数据转换为应用程序数据的端口。这不应该只进行单元测试吗?
我的下一个想法是模拟存储过程并在测试中加载 Spring XML,而不需要任何 Web 服务器,这样可以更轻松地模拟类。为此,我将使用 Spring MockMvc 等库来处理其余端点,使用 Mockrunner 来处理 JMS。但同样,这种方法仍然会测试一些适配器,并使测试变得复杂,因为测试的结果将是 XML 和 JSON 有效负载。此应用程序中完成的转换非常繁重,其中相同的消息类型可能包含类的不同版本(每个消息可能包含许多实现多个接口(interface)的复杂对象)。
所以现在我在想,也许最好的方法是从应用程序的入口点、从适配器调用的服务创建测试,并验证负责向代理发送消息或向代理发送消息的服务。调用其他 REST 端点实际上被调用。然后,只需确保端点有适当的单元测试,并通过提供一些在真实环境中执行的冒烟测试来验证部署后一切正常。这将测试连接逻辑,并且将单独测试业务逻辑,而不关心是否添加了新适配器或删除了适配器。
这种方法正确吗?如果不以这种方式进行测试,我会留下一些东西吗?还是它仍然太多了,我应该相信单元测试?
谢谢。
最佳答案
您的应用程序和环境听起来相当复杂。我肯定想要集成测试。我将按如下方式从外到内测试应用程序:
编写一个在实际生产环境中针对应用程序运行的冒烟测试套件。 cucumber 将是一个很好用的工具。该套件应该只执行生产中安全的操作,并且应该尽可能小,同时让您确信应用程序已正确安装和配置,并且它与其他系统的集成正在运行。
编写一个验收测试套件,在测试环境中针对整个应用程序运行。 cucumber 在这里也是一个不错的选择。
我希望验收测试环境包括一个 Tomcat 服务器,其中包含生产 Tomcat 中存在的所有服务的测试版本,以及一个具有与生产相同的架构、存储过程等(但不是生产数据)的数据库。通过使用记录/重播库(例如 Betamax)进行 stub 和模拟来处理您不拥有的外部依赖项和/或自己实现它们的测试版本。验收测试应该可以自由地对数据执行任何操作,并且他们不必担心不属于您的服务的可用性。
编写足够的验收测试来描述应用程序的主要用例并测试应用程序各部分(子系统和类)之间的所有重要交互。也就是说,使用您的验收测试作为集成测试。我发现验收和集成测试的目标之间几乎没有冲突。但是,请勿编写超出规范和集成覆盖范围所需的验收测试,因为它们相对较慢。
对每个执行任何有趣操作的类进行单元测试,只留下经过验收测试充分测试的类。由于您已经进行了集成测试,因此您的单元测试可以是真正的单元测试,它会 stub 或模拟它们的依赖项。 (尽管让单元测试的类使用足够简单而不会在单元测试中引起问题的真实依赖项并没有什么问题)。
测量代码覆盖率,以确保验收和单元测试相结合来测试您的所有代码。
关于java - 使用 Cucumber 进行回归组件测试。应该测试的层是否有边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35962167/
[在此处输入图像描述][1]我正在努力弄清楚回归是否是我需要走的路线,以便解决我当前使用 Python 的挑战。这是我的场景: 我有一个 195 行 x 25 列的 Pandas Dataframe
我想训练回归模型(不是分类),其输出是连续数字。 假设我有输入变量 X,其范围在 -70 到 70 之间。我有输出变量 Y,其范围在 -5 到 5 之间。X 有 39 个特征,Y 有 16 个特征,每
我想使用神经网络逼近 sinc 函数。这是我的代码: import tensorflow as tf from keras.layers import Dense from keras.models
我对 postgres 表做了一些更改,我想将其恢复到以前的状态。没有数据库的备份。有办法吗?比如,postgres 会自动拍摄快照并将其存储在某个地方,还是原始数据会永远丢失? 最佳答案 默认情况下
我有大约 100 个 7x7 因变量矩阵(所以有 49 个因变量)。我的自变量是时间。我正在做一个物理项目,我应该通过求解 ODE 得到一个矩阵函数(矩阵的每个元素都是时间的函数)。我使用了 nump
我之前曾被告知——出于完全合理的原因——当结果变量为二元变量时(即是/否、真/假、赢/输等),不应运行 OLS 回归。但是,我经常阅读经济学/其他社会科学方面的论文,其中研究人员对二元变量运行 OLS
您好,我正在使用生命线包进行 Cox 回归。我想检查非二元分类变量的影响。有内置的方法吗?或者我应该将每个类别因子转换为一个数字?或者,在生命线中使用 kmf fitter,是否可以对每个因素执行此操
作为后续 this question ,我拟合了具有定量和定性解释变量之间相互作用的多元 Logistic 回归。 MWE如下: Type |z|) (Intercept) -0.65518
我想在单个动物园对象中的多对数据系列上使用 lm 执行滚动回归。 虽然我能够通过以下代码对动物园对象中的一对数据系列执行滚动回归: FunLm seat time(seat) seat fm
是否有一种简单的方法可以在 R 中拟合多元回归,其中因变量根据 Skellam distribution 分布? (两个泊松分布计数之间的差异)?比如: myskellam <- glm(A ~ B
包含各种特征和回归目标(称为 qval)的数据集用于训练 XGBoost 回归器。该值 qval 介于 0 和 1 之间,应具有以下分布: 到目前为止,还不错。但是,当我使用 xgb.save_mod
这有效: felm(y ~ x1 + x2 | fe1 + fe2 | 0 | , data = data) 我想要: fixedeffects = "fe1 + fe2" felm(y ~ x1
这有效: felm(y ~ x1 + x2 | fe1 + fe2 | 0 | , data = data) 我想要: fixedeffects = "fe1 + fe2" felm(y ~ x1
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我刚刚开始使用 R 进行统计分析,而且我还在学习。我在 R 中创建循环时遇到问题。我有以下案例,我想知道是否有人可以帮助我。对我来说,这似乎是不可能的,但对你们中的一些人来说,这只是小菜一碟。我有不同
是否可以在 sklearn 中使用或不使用(即仅使用截距)预测器来运行回归(例如逻辑回归)?这似乎是一个相当标准的类型分析,也许这些信息已经在输出中可用。 我发现的唯一相关的东西是sklearn.sv
假设我对一些倾斜的数据分布执行 DNN 回归任务。现在我使用平均绝对误差作为损失函数。 机器学习中的所有典型方法都是最小化平均损失,但对于倾斜来说这是不恰当的。从实际角度来看,最好尽量减少中值损失。我
我正在对公寓特征进行线性回归分析,然后预测公寓的价格。目前,我已经收集了我所在城市 13000 套公寓的特征。我有 23-25 个特征,我不确定在公寓价格预测中拥有如此多的特征是否正常。 我有以下功能
我是 ML 新手,对 catboost 有疑问。所以,我想预测函数值(例如 cos | sin 等)。我回顾了一切,但我的预测始终是直线 是否可能,如果可能,我该如何解决我的问题 我很高兴收到任何评论
我目前已经为二进制类实现了概率(至少我这么认为)。现在我想扩展这种回归方法,并尝试将其用于波士顿数据集。不幸的是,我的算法似乎被卡住了,我当前运行的代码如下所示: from sklearn impor
我是一名优秀的程序员,十分优秀!