test
文章平均质量分 89
老马啸西风
Github: https://github.com/houbb
Email:[email protected]
展开
-
mockito-02-spring aop 与 mockito 冲突及解决方案
我们通过把 spring 增强的代理恢复为普通对象,然后让 mockito 初始化处理。2)将被 spring 代理的对象还原为原始对象,让 mockito 可以正常代理。1)将 mock 的数据设置到对应的 bean 中,解决 mock 失效问题。这种,如果 service 被代理的话,会导致 mock 无效,断言无效。这里可以发现需要修改 init 方法,最好是统一继承自抽象测试类。可以通过这个方法,把所有的 mock 对象恢复。改进思路:我们通过反射,将每一个属性还原。即可解决注入失败问题。原创 2024-03-28 14:27:22 · 709 阅读 · 0 评论 -
mockito-01-overview mockito 简介及入门使用
Mock通常是指,在测试一个对象A时,我们构造一些假的对象来模拟与A之间的交互,而这些Mock对象的行为是我们事先设定且符合预期。通过这些Mock对象来测试A在正常逻辑,异常逻辑或压力情况下工作是否正常Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。原创 2024-03-28 14:26:18 · 647 阅读 · 0 评论 -
test 之 jmockit-05-Measuring code coverage 测试代码覆盖率
coverage-outputDir:输出目录的绝对或相对路径,用于写入任何“coverage.ser”或“index.html”文件(加上HTML报告的其余“.html”文件,在自动创建的子目录中) 目录)。因此,输出模式“serial”和“serial-append”之间的区别在于,对于第一个模式,我们有多个“coverage.ser”文件(每个文件位于单独的测试运行所使用的不同目录中),而对于第二个模式,我们共享 所有测试运行之间的单个数据文件。但是,同时指定每对中的一个也是有效的。原创 2024-03-28 14:24:47 · 836 阅读 · 0 评论 -
test 之 jmockit-04-Faking 伪造
在运行时,真正发生的情况是,伪造的方法/构造函数的执行被拦截并重定向到相应的伪造方法,然后该方法执行并返回(除非抛出异常/错误)给原始调用者,而这一调用者没有注意到 实际上执行了不同的方法。当假类应用于真实类时,后者会获取那些具有相应假方法的方法和构造函数的实现,这些方法和构造函数会暂时替换为匹配假方法的实现,如假类中所定义的。在上面的测试中,所有对实现 Service#doSomething() 的方法的调用都将被重定向到假方法实现,无论实现接口方法的实际类如何。原创 2024-03-28 14:23:20 · 917 阅读 · 0 评论 -
test 之 jmockit-03-Mocking 模拟
为了根据重播时收到的参数来决定记录期望的结果,我们可以使用 Delegate 对象,如下例所示。@TestDelegate 接口是空的,仅用于告诉 JMockit 重播时的实际调用应委托给指定对象中的“delegate”方法。该方法可以有任何名称,只要它是委托对象中唯一的非私有方法。至于委托方法的参数,要么与记录方法的参数匹配,要么不存在。在任何情况下,委托方法都可以有一个 Invocation 类型的附加参数作为其第一个参数。原创 2024-03-28 14:22:17 · 1006 阅读 · 0 评论 -
test 之 jmockit-01-overview 概览
自动化开发人员测试可以分为两大类,无论它们是针对单个程序“单元”、多个一起工作的此类单元,还是被测系统的整个“切片”(“SUT”)。在这里,我们对皮下测试特别感兴趣,这些测试不是通过应用程序 UI 执行的,而是测试有意义的业务场景中涉及的所有程序单元。此类测试的范围从通过应用程序 UI 运行的端到端系统测试(当 SUT 有 UI 时)到执行一小组相互关联的单元的测试。在下面的 JUnit 测试类中,每个测试都将验证持久性操作的正确执行以及对电子邮件 API 的预期调用。JMockit 两者都支持。原创 2024-03-28 14:20:37 · 553 阅读 · 0 评论 -
jmockit-01-test 之 jmockit 入门使用案例
(2)注解@Test、@Mocked、@Injectable、@Capturing是和new Expectations()方式搭配使用。然后@Mocked、@Injectable、@Capturing又有不同的特性,就可以解决不同场景下的Mock了。2)repaly:在这个阶段,执行单元测试Case,原先在record 阶段被录制的调用都可能有机会被执行到。主要使用@Test、@Mocked、@Injectable、@Capturing和Expectations搭配使用实现Mock。原创 2024-03-28 14:19:05 · 1237 阅读 · 0 评论 -
test-04-test case generate 测试用例生成 tcases 快速开始
要获取 Tcases 的命令行版本,请从 Maven Central Repository 下载 Tcases 二进制分发文件,使用以下步骤。所有 Tcases 文档的首选形式是 JSON,它能够表达所有 Tcases 的特性,并且在本指南的所有示例中都使用 JSON。但 Tcases 的原始版本使用 XML 作为所有文档的格式,对于较旧的文档,仍然支持 XML。,这是一个定义要测试的系统函数的 “输入空间” 的文档。例如,为了快速检查,你可以运行 Tcases 自带的一个示例,使用以下命令。原创 2024-01-14 13:34:37 · 1142 阅读 · 0 评论 -
test-04-test case generate 测试用例生成 tcases A model-based test case generator
然后,Tcases 允许你通过指定想要的覆盖级别来控制你的样本子集中的测试用例数量。使用你的输入定义和生成器定义,Tcases 生成一个系统测试定义。系统测试定义是一份文档,列出了每个系统功能的一组测试用例,提供了指定级别的覆盖。使用Tcases,你定义系统被测系统的输入空间以及你想要的覆盖级别。例如,Tcases 带有一个内置的转换器,将系统测试定义转换为 JUnit 或 TestNG 测试类的 Java 源代码模板。首先,你创建一个系统输入定义,这是一个将系统定义为一组功能的文档。生成器定义是可选的。原创 2024-01-14 13:33:48 · 862 阅读 · 0 评论 -
test-03-test case generate 测试用例生成 Randoop 介绍
编写测试是重要的,但也是困难且耗时的任务。Randoop可以自动生成Java类的单元测试。Randoop在许多应用场景中取得了成功,特别是在库类(例如java.util)中。Randoop在ABB和Microsoft等公司以及开源项目中都得到了使用。// 此测试表明JDK集合类可以创建一个与自身不相等的对象。@Test// TreeSet是一个有序集合。根据API文档,此构造函数调用应该引发// ClassCastException,因为列表元素不可比较。原创 2024-01-14 13:32:01 · 988 阅读 · 0 评论 -
test-02-test case generate 测试用例生成 EvoSuite 介绍
EvoSuite是一个自动生成Java类的JUnit测试套件的工具,其目标是满足代码覆盖率标准,如分支覆盖率。它采用基于遗传算法的演化方法来生成测试套件。为了提高可读性,生成的单元测试被最小化,并向测试中添加了捕获被测试类当前行为的回归断言。原创 2024-01-14 13:30:29 · 1043 阅读 · 0 评论 -
test Symbolic Execution-04-JPF (Java PathFinder) JPF is an extensible software analysis framework fo
但JPF并不止步于此 - 您可以定义自己的属性,这主要通过所谓的监听器完成,这是一种可以让您紧密监视JPF执行的所有操作的“插件”,例如执行单个指令、创建对象、达到新的程序状态等等。回到(3),JPF现在尝试“b=2”,当执行(4)时,这当然会导致我们的小程序出现问题,如下所示的错误报告。JPF采用的第一道防线是状态匹配:每次JPF到达一个选择点时,它都会检查是否已经看到过类似的程序状态,如果是这样,它可以安全地放弃该路径,回溯到仍有未探索选择的前一个选择点,并从那里继续。以下是对jpf-core的解释。原创 2024-01-13 00:28:49 · 786 阅读 · 0 评论 -
test Symbolic Execution-03-Soot - A Java optimization framework
Soot是一个Java优化框架。Baf:一个简化的字节码表示,易于操作。Jimple:一个适用于优化的带类型的3地址中间表示。Shimple:Jimple的SSA变体。Grimp:适用于反编译和代码检查的Jimple的聚合版本。详细信息请参阅 https://soot-oss.github.io/soot。原创 2024-01-13 00:24:15 · 960 阅读 · 0 评论 -
test Symbolic Execution-02-pietrobraione/jbse A symbolic Java virtual machine for program analysis,
还有一个附加的运行时依赖项,由Gradle无法处理,因此您需要手动修复。唯一需要注意的是,由于从版本2020-09开始,Eclipse需要至少Java 11才能运行,因此您的开发机需要同时具备Java 11或更高版本(用于运行Eclipse)和Java 8设置(用于构建和运行JBSE)。所有测试都应该通过(我们在每次提交之前都测试JBSE),可能的例外是jbse.dec.DecisionProcedureTest类中的测试,它测试与Z3或CVC4的交互,因此如果没有正确的求解器安装可能会失败。原创 2024-01-12 09:37:58 · 362 阅读 · 0 评论 -
test Symbolic Execution-01-符号执行(Symbolic Execution)简介
符号执行(Symbolic Execution)是一种静态分析技术,旨在理解程序在输入条件的不同组合下的行为。与传统的具体执行不同,符号执行使用符号变量代替具体的输入值,从而允许在不实际运行程序的情况下推导执行路径、条件和约束。这样的方法可以帮助发现潜在的程序错误、漏洞和不变性质。在符号执行中,程序的输入和状态被表示为符号变量。这些变量不包含具体的数值,而是包含未知的符号,代表可能的输入条件。符号执行通过在程序的控制流图中模拟执行路径来构建符号执行路径。原创 2024-01-12 09:36:37 · 846 阅读 · 0 评论 -
test Property-based Testing-04-junit-quickcheck
junit-quickcheck内置了用于生成函数接口类型值的设施(无论它们是否标有[FunctionalInterface](http://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html)),还有用于数组或枚举类型的设施。当多个生成器可以满足给定属性参数的类型(例如,java.io.Serializable),在给定的生成中,junit-quickcheck 将以(大致)相等的概率随机选择其中之一的生成器。原创 2024-01-11 14:25:25 · 1016 阅读 · 0 评论 -
test Property-based Testing-03-QuickTheories Java的属性驱动测试框架入门介绍
传统的单元测试通过指定一系列具体的示例并对被测试单元的输出/行为进行断言来进行。而属性驱动测试摆脱了具体的例子,而是检查某些属性是否对所有可能的输入都成立。它通过自动生成一组有效输入的随机样本来实现这一点。这可以是发现您和您的代码中存在的错误假设的一种有效方式。如果“随机”一词让您感到有些紧张,不用担心,QuickTheories 提供了保持测试可重复性的方法。原创 2024-01-11 14:23:47 · 809 阅读 · 0 评论 -
test Property-based Testing-02-jqwik Java的属性驱动测试框架入门介绍
除了深入研究Java对反射的完全混乱的处理方式之外,这项任务还要求我尝试使用不同的方法编写属性,研究其他属性驱动测试库的工作原理,并找到一种将这种新类型的测试整合到我习惯的TDD风格中的方法。作为一个开发者,我一直在贯彻测试驱动开发的理念,因此当我试图了解“其他人”是如何工作和思考的时候,一个社区对测试的方法是我首先关注的事情之一。在接下来的几周中,我将发布一系列博客文章,描述我在这个过程中学到的有关属性驱动测试的本质以及如何在Java中使用它。原创 2024-01-11 14:21:54 · 826 阅读 · 0 评论 -
test fuzz-07-模糊测试 libfuzzer
该工具会尝试移除输入数据中的不必要部分,同时保留导致问题的关键信息。生成的最小化测试用例会被重新运行,以确保它仍然能够触发相同的问题。在函数中,我们对输入数据进行简单的累加,并模拟了一个问题的发现情况。请注意,这只是一个基本的演示,实际使用中需要根据被测试程序的特定需求进行更复杂的设置。以下是一个简单的 libFuzzer 入门例子,用于模糊测试一个假设的目标函数。这是一个简单的入门例子,实际应用中通常需要更复杂的目标函数和更全面的测试设置。实现快速生成最小化的测试用例的关键在于其内建的最小化工具。原创 2024-01-10 18:30:59 · 984 阅读 · 0 评论 -
test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java
在大多数情况下,可以通过将 Kelinci 构建的 ‘classes’ 目录放在类路径上而不是 Fat JAR,然后在类路径上添加与 Kelinci 和目标都可以使用的库 JAR 版本。稍后执行插装程序时,它会设置一个 TCP 服务器,并为每个传入的请求在单独的线程中运行目标应用程序。您将希望运行与 Java 端 Kelinci 组件数量相同的 afl-fuzz 进程,其中每个 afl-fuzz 进程连接到不同的 Kelinci 服务器。‘queue’ 子目录中的输入文件触发了不同的程序行为。原创 2024-01-10 18:28:22 · 822 阅读 · 0 评论 -
test fuzz-04-模糊测试 jazzer Coverage-guided, in-process fuzzing for the JVM
这里,前两个参数是Java库的Maven坐标和要进行模糊测试的Java函数的完全限定名称,采用"方法引用"形式。假设您的项目已经设置了 JUnit 5.9.0 或更高版本,例如基于官方的 junit5-samples。Jazzer是由Code Intelligence开发的一款基于覆盖率引导的JVM平台内部模糊测试工具。几秒钟后,Jazzer应该会触发一个AssertionError,复现它在此库中发现的一个已修复的错误。可选的–autofuzz_ignore标志接受一个要忽略的未捕获异常类的列表。原创 2024-01-09 10:17:13 · 1096 阅读 · 0 评论 -
test fuzz-03-模糊测试 Atheris A Coverage-Guided, Native Python Fuzzer
它支持对Python代码的模糊测试,还支持为CPython编写的本地扩展。它使用一种称为"基于覆盖率的反馈"(coverage-guided feedback)的方法,通过监视程序的代码覆盖率来引导模糊测试的输入生成。模糊测试是一种自动化测试技术,它通过向程序输入注入随机或半随机的数据(称为"模糊"输入),然后监控程序的执行,以发现潜在的错误、漏洞和安全问题。如果你的模糊测试通过其他方法退出,例如SIGINT(Ctrl+C),Atheris将尝试生成报告,但可能无法生成(具体取决于你的代码)。原创 2024-01-09 10:14:43 · 856 阅读 · 0 评论 -
test fuzz-02-模糊测试 JQF + Zest Semantic Fuzzing for Java
结构感知模糊测试基于生成器的语义模糊测试。原创 2024-01-09 00:06:25 · 957 阅读 · 0 评论 -
test fuzz-01-模糊测试(Fuzz Testing)入门 Atheris、Jazzer、jqf、kelinci、FLA、libfuzzer 对比
模糊测试(Fuzz Testing)是一种自动化的测试方法,通过向程序、应用程序或系统输入注入大量随机或半随机生成的数据(模糊输入),以寻找潜在的安全漏洞、软件缺陷或异常行为。模糊测试的目标是通过在输入中引入未知、异常或非预期的数据,评估目标系统的鲁棒性和稳定性。原创 2024-01-09 00:03:51 · 962 阅读 · 0 评论 -
data-factory java 开源根据对象定义自动生成测试对象数据
data-factory](https://github.com/houbb/data-factory) 项目用于根据对象,随机自动生成初始化信息。便于测试。为了更加灵活的指定生成,最大程度的重用自定义策略。v1.0.0 支持用户自定义注解。比如指定一个返回固定值的注解。原创 2024-01-08 21:15:52 · 2540 阅读 · 0 评论 -
test mutation-03-变异测试 mujava Mutation 入门
如果要测试的 Java 文件需要其他 Java 文件或类文件,则它们也应放置在 MuJava_HOME\src 中。µJava 系统要求修改 Java CLASSPATH,以包括 µJava jar、openjava jar、JUnit 库和 Java tools.jar 文件。以下示例显示了 result 下的 Stack 目录,其中包含 class_mutants 中的面向对象的变异体和一个单独目录中的传统变异体。在µJava中,对待测类的测试被编码在单独的类中,这些类调用待测类的方法。原创 2024-01-08 21:11:52 · 840 阅读 · 0 评论 -
test mutation-02-变异测试 mutate-test-kata入门介绍
由于测试质量低,仅仅通过单元测试和高单元测试覆盖率数字可能会给人一种虚假的安全感。如何使用变异测试和常见的测试异味(test smells)来识别问题点。如何解决这些问题。代码卡塔是一种编程练习,通过实践帮助程序员磨练他们的技能。代码卡塔通常被设置为一系列单元测试,这些测试会失败。你的任务是编写代码使它们通过。这个想法灵感来自于日本武术中的卡塔概念。就像在武术中一样,你可以多次重复卡塔来改进解决方案。请注意,这个卡塔有点不同 - 所有测试最初都会通过。原创 2024-01-08 21:09:02 · 1305 阅读 · 0 评论 -
test mutation-01-变异测试 PITest PIT 是一种先进的变异测试系统,为 Java 和 JVM 提供黄金标准的测试覆盖率。
如果测试套件能够发现这些引入的变化,说明测试覆盖率相对较高,测试质量较好。PIT生成详细的变异测试报告,其中包含有关每个引入的突变的信息,以及测试套件对这些突变的反应(杀死、存活等)。突变测试是一种软件测试方法,通过对源代码进行有目的的修改(即引入突变),然后运行现有的测试套件,来检测测试用例是否能够发现这些变化。PIT通过模拟引入各种不同类型的突变来评估测试套件的质量,帮助开发人员发现可能存在的测试不足之处。打开生成的变异测试报告,查看测试覆盖率、变异的数量、被杀死的变异等详细信息。原创 2024-01-06 01:51:00 · 1207 阅读 · 0 评论 -
test mutation-00-变异测试概览
在突变测试中,测试代码的一部分(通常是通过引入故意的代码变化)被修改,然后运行测试套件来检查是否有测试用例能够检测到这些变化。如果测试套件能够检测到变异,即测试用例能够发现引入的错误,这个变异就被称为“被杀死”(killed)。如果测试套件未能检测到变异,即测试用例未能发现引入的错误,这个变异就被称为“存活”(alive)。突变测试的核心思想是通过模拟代码中的错误变化,来评估测试用例的质量。突变测试通常用于衡量测试套件对于软件代码的健壮性,尤其是在复杂系统中,它可以帮助发现潜在的、被遗漏的错误。原创 2024-01-06 01:30:45 · 772 阅读 · 0 评论 -
test coverate-06-测试覆盖率 OpenClover 是一个商业化的代码覆盖率工具 OpenClover 对比 jacoco
OpenClover能够确定哪些测试需要重新运行以适应修改后的应用程序类。这可以极大地减少运行测试所需的时间。OpenClover 和 JaCoCo 都是用于 Java 代码覆盖率的工具,它们有一些相似之处,同时也有一些不同之处。它还在定义代码覆盖测量范围的灵活性上超过其他覆盖工具。OpenClover在管理覆盖数据方面非常灵活。原创 2024-01-05 15:15:57 · 996 阅读 · 0 评论 -
test coverate-04-测试覆盖率 Cobertura Cobertura/emma/jacoco 的差异对比?
Cobertura是免费软件,大部分使用GNU GPL许可,您可以根据自由软件基金会发布的GNU通用公共许可证的第2版或(根据您的选择)任何以后的版本重新分发或修改它。有关详细信息,请查看此分发中包含的 “LICENSE.txt” 文件。net.sourceforge.cobertura.javancss包中的代码版权属于 Chr. Clemens Lee(C)2000。Cobertura、Emma(JaCoCo的前身)和JaCoCo都是Java代码覆盖率工具,它们在实现和特性上存在一些差异。原创 2024-01-05 15:10:07 · 1037 阅读 · 0 评论 -
test coverate-03-测试覆盖率 EMMA 一款免费的Java代码覆盖工具 emma 和 jacoco 对比
(请注意,你可以使用现有构建中的自己的类和jar执行相同的操作,而不是Swing演示。同样,稍微试玩一下Swing演示,然后关闭它。我将使用命令行的原因有几个:一是为了避免现在花时间设置ANT,二是因为EMMA命令行工具可以在现有的ANT构建的基础上使用,而无需更改它(例如,你可以使用单个命令为构建的输出进行仪器化)。对于每种覆盖类型,都显示了总体覆盖百分比,以及实际的百分比比例:后者对于知道哪些区域需要更多测试工作很重要(一个半覆盖的包含500个类的包需要比一个半覆盖的包含10个类的包更多的关注)。原创 2024-01-05 15:08:13 · 855 阅读 · 0 评论 -
test 系统学习-05-test jacoco 测试覆盖率与 idea 插件
在使用 Maven 和 JMockit 进行单元测试时,你可以结合使用 JaCoCo 插件来查看增量的代码覆盖率报告。JaCoCo 是一个流行的代码覆盖率工具,它与 Maven 集成良好,并且可以与 JMockit 一起使用。</</</</</</</</</</</</</</</</</</</</</</</</</</</</</在 IntelliJ IDEA 中打开 Maven 项目。确保项目已正确加载和配置。原创 2024-01-04 13:38:31 · 1594 阅读 · 0 评论 -
test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍
市场上java主要代码覆盖率工具:EMMA、JaCoCo总结一下个人对JaCoCo优势的理解:(1)JaCoCo支持分支覆盖、引入了Agent模式。(2)EMMA官网已经不维护了,JaCoCo是其团队开发的,可以理解为一个升级版。(3)JaCoCo社区比较活跃,官网也在不断的维护更新。我们前期使用的EMMA,也做了全量、差异覆盖率,和精准耦合也结合在了一起,但后来考虑到JaCoCo的优势,也就全部切换了过来。原创 2024-01-04 13:37:20 · 1139 阅读 · 0 评论 -
test dbtest-03-对比 Liquibase、flyway、dbDeploy、dbsetup
下面是一个简要的对比表格,涵盖了 Liquibase、Flyway、dbDeploy 和 DbSetup 这四个数据库变更管理工具的一些主要特点。原创 2024-01-03 00:15:06 · 975 阅读 · 0 评论 -
test dbtest-02-Liquibase 是一个数据库变更管理工具
Liquibase 是一种开源的数据库架构变更管理解决方案,它使你能够轻松地管理数据库变更的修订版本。在发布数据库时消除错误和延迟。针对特定版本部署和回滚变更,无需了解已经部署了什么。将数据库和应用程序变更一起部署,以确保它们始终保持同步。原创 2024-01-03 00:03:50 · 484 阅读 · 0 评论 -
test dbtest-00-数据库测试
数据库测试是确保数据库系统正确性、性能和可靠性的重要环节。原创 2024-01-03 00:02:47 · 619 阅读 · 0 评论 -
test ui-04-testcomplete 入门介绍
TestComplete是一款适用于各种应用程序类型和技术的自动化测试环境,包括(但不限于)Windows、.NET、WPF、Visual C++、Visual Basic、Delphi、C++Builder、Java以及Web应用程序和服务。TestComplete既适用于功能测试,也适用于单元测试。它提供卓越的支持,可用于日常回归测试,并支持许多其他类型的测试:数据驱动测试、分布式测试等。您可以通过录制或在TestComplete面板和编辑器中编辑测试命令来创建测试。原创 2024-01-02 17:11:26 · 590 阅读 · 0 评论 -
test ui-03-cypress 入门介绍
简而言之,Cypress 是一款专为现代Web构建的下一代前端测试工具。我们解决了开发人员和质量保证工程师在测试现代应用程序时面临的关键问题。Cypress经常与Selenium进行比较;然而,Cypress在根本上和体系结构上都是不同的。Cypress不受Selenium相同的限制。这使您能够编写更快、更简便且更可靠的测试。原创 2024-01-02 16:47:20 · 484 阅读 · 0 评论 -
test ui-01-UI 测试组件之 Selenium 入门介绍
Selenium 是一个涵盖多种工具和库的项目,旨在支持和实现对 Web 浏览器的自动化。它提供了扩展来模拟用户与浏览器的交互,一个用于扩展浏览器分配的分发服务器,以及符合 W3C WebDriver 规范的基础设施,使您能够为所有主要的 Web 浏览器编写可互换的代码。这个项目得以实现,得益于那些自愿贡献的志愿者,他们投入了数千小时的个人时间,并将源代码免费提供给任何人使用、享受和改进。Selenium 将浏览器供应商、工程师和热衷者聚集在一起,促进了关于 Web 平台自动化的开放讨论。原创 2023-12-29 00:23:41 · 1162 阅读 · 0 评论