`
toolkit1216
  • 浏览: 29039 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jmockit对静态函数和参数调用接口实现打桩2

阅读更多
单元测试中的打桩对象,主要有两种:
1、对象参数:在外部构造,作为参数传入调用的方法;
2、静态方法:在功能方法内部调用;
由于我们系统中有很多静态方法,所以前面选型的mock工具:jmock/easymock/gmock/mockito 就直接被淘汰,它们不支持这种能力
现在支持这种能力的mock工具只有JMockit,
但是,经过昨天和今天的测试,发现它使用起来还是比较复杂的,而且,它不能和groovy很好的兼容 !

下面是成功实现:就是结合使用JMockit和groovy两种能力,只使用JMockit的静态方法替换能力,剩下的全部使用groovy自身的map和expando能力
下面的例子是测试 ScheduleTargetImpl.deleteTarget方法的测试代码,两种能力都用到了
实现实例
public class ScheduleTargetImplTest {
@Test
public void testDeleteTarget() {
// 对TExpandedNElement 打桩
def element = [getProductid:{"pid"}, getProductTarget:{"pTarget"}] as TExpandedNElement
// 对TTarget 打桩
def Target = [getTargetID:{"vid"}] as TTarget
// 替换ContextUtils.getRequestMap 静态方法
Mockit.redefineMethods(ContextUtils, TargetMock)
// 替换AbstractTargetFactory.getInstance() 静态方法,并对返回对象的deleteTarget方法 打桩
Mockit.redefineMethods(AbstractTargetFactory, TargetMock1)

ScheduleTargetImpl impl = new ScheduleTargetImpl();
assertTrue impl.deleteTarget("token", element, Target);
}
}
class TargetMock {
public static Map getRequestMap() {
new HashMap()
}
}
class TargetMock1{
public static AbstractTargetFactory getInstance() {
[deleteTarget:{}] as AbstractTargetFactory
}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    基于Hook的动态打桩工具(Linux)

    它允许开发人员对全局函数、静态函数、类成员函数甚至是类的虚成员函数进行打桩,以支持单元测试。使用这样的工具,开发者可以更有效地编写测试用例,确保代码质量,并且对程序的运行有更深入的理解。 总的来说,...

    cpp-stub函数打桩相关文件

    - **记录调用**:桩函数可以记录函数调用的次数、参数等信息,用于验证代码逻辑。 3. **C++中的函数打桩** 在C++中,有多种实现函数打桩的方式: - **宏**:通过宏定义,可以轻松创建简单的桩函数,但这可能导致...

    CppFreeMock:基于gmock,可以在不改变源代码的情况下模拟全局函数、成员函数、类静态函数

    基于gmock,可以在不更改源代码的情况下模拟全局函数、成员函数、类静态函数。 是 OneNote 上的文档和设计笔记宿主。 你好,世界: string func () { return " Non mocked. " ; } TEST (HelloWorld, First) { ...

    Detours静态库

    函数钩子允许开发者在调用原函数之前或之后插入自定义代码,实现对系统行为的监控或改变。这种技术广泛应用于调试、性能分析、安全检测等领域。Detours通过将函数调用重定向到用户定义的替代函数来实现这一目标,而...

    gmock-global:提供使用gmock模拟全局函数的功能

    gmock-global 这个仅标头的库为全局函数实现了功能。 介绍 是用于编写模拟类的C ++框架。 创建模拟对象以模拟方法... 例如,要对模拟函数multiply两个double参数和double结果,必须编写声明: MOCK_GLOBAL_FUNC

    CPPNIUT使用过程常见问题FAQ

    2. **静态函数的打桩** 静态函数的可见性仅限于其所在的源文件,这使得在其他文件中直接对其进行单元测试变得困难。为了解决这个问题,可以在源文件中创建一个非静态的包装函数,如`ut_foo()`,它调用原始的静态...

    计算机系统2021A-Bugs1

    - 库打桩是指在程序运行时替换或插入函数调用,常用于动态链接阶段,以便于调试、性能分析或系统监控。题目中指出,C选项和D选项关于"静态链接/运行时"和"动态链接/运行时"的理解可能存在歧义,实际上,库打桩主要...

    二十三种设计模式【PDF版】

    你的设计应该对手头的问题有针对性,同时对将来的问题和需求 也要有足够的通用性。 你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计, 即使不是...

    信息安全_从安卓系统源码看逆向分析.曹圣.pptx

    同时,对`dex`、`class`、`method`等的分析将更加细致,结合静态分析和动态调试,以实现更全面的保护。此外,源码分析还可以帮助识别隐藏的恶意行为,以及潜在的系统安全漏洞。 总之,从Android系统源码的角度进行...

Global site tag (gtag.js) - Google Analytics