Java单元测试实践-10.Mock非静态方法

单元测试之mock使用 阅读详情

Java单元测试实践-00.目录(9万多字文档+700多测试示例)
https://blog.youkuaiyun.com/a82514921/article/details/107969340

1. Mock非静态方法

对非静态方法的进行Mock等处理时,部分情况与对Spring的@Component组件的处理类似,主要在后续Spring相关的内容进行详细说明,本部分的内容相对简略。

1.1. Mock后Stub非静态方法

1.1.1. 生成非静态方法对应的类的Mock对象

参考 https://github.com/mockito/mockito/wiki 。使用mock()方法可以通过代码创建Mock对象。

参考 https://static.javadoc.io/org.mockito/mockito-core/latest/org/mockito/Mockito.html#mock-java.lang.Class- 。使用Mockito.mock()方法可以创建指定的类或接口的Mock对象。

对非静态方法进行Stub时,可以使用Mockito.mock()方法创建Mock对象,再对Mock对象的方法进行Stub。

1.1.2. Stub单例模式类的非静态方法

对于单例模式类的非静态方法进行Stub,可以按照以下步骤执行:

  • 对于使用单例模式的类,使用@PrepareForTest注解及PowerMockito.mockStatic()方法进行处理;

  • 通过Mockito.mock()方法创建对应类的Mock对象;

  • 对获取实例的静态方法进行Stub,将返回修改为Mock对象;

  • 针对需要Stub的非静态方法,对Mock对象进行Stub。

示例如下,可参考示例TestNStMSingleton1类。

PowerMockito.mockStatic(TestNonStaticSingleton1.class);

TestNonStaticSingleton1 testNonStaticSingleton1Mock = Mockito.mock(TestNonStaticSingleton1.class);

Mockito.when(TestNonStaticSingleton1.getInstance()).thenReturn(testNonStaticSingleton1Mock);

Mockito.when(testNonStaticSingleton1Mock.test1()).thenReturn(TestConstants.MOCKED);

1.1.3. Stub无参数构造函数

使用“PowerMockito.whenNew(需要Stub的构造函数所在的类.class).withNoArguments().thenReturn();”,可以对无参数构造函数进行Stub,thenReturn()方法的参数指定构造函数被Stub后返回的对象,可以使指定类的无参数构造函数返回指定的对象,可为被Mock的对象,如下所示:

TestNonStaticNoArg1 testNonStaticNoArg1Mock = Mockito.mock(TestNonStaticNoArg1.class);
Mockito.when(testNonStaticNoArg1Mock.test1()).thenReturn(TestConstants.MOCKED);

PowerMockito.whenNew(TestNonStaticNoArg1.class).withNoArguments().thenReturn(testNonStaticNoArg1Mock);
1.1.3.1. 在测试代码调用构造函数

在测试代码执行被Stub的构造函数时,可以不使用@PrepareForTest注解,Stub也能够生效,生成对象为Stub指定的对象。

例如执行上述代码对TestNonStaticNoArg1类的无参数构造函数进行Stub,当执行new TestNonStaticNoArg1()生成TestNonStaticNoArg1类的实例时,生成的实例为上述指定的Mock对象,test1()方法的返回值为TestConstants.MOCKED。

可参考示例TestNStMConstructorNoArgNoPrepare类test1方法。

1.1.3.2. 在被测试代码调用构造函数

通常情况下,被Stub的构造函数是在被测试代码中执行的,而不是在测试代码中执行的。因此主要需要考虑在被测试代码调用被Stub构造函数的情况。

在被测试代码执行被Stub的构造函数,在测试代码中不使用@PrepareForTest注解时,Stub不生效,生成对象为原始对象。可参考示例TestNStMConstructorNoArgNoPrepare类test2方法。

在被测试代码执行被Stub的构造函数,需要在测试代码的类级别或方法级别,使用@PrepareForTest注解指定调用构造函数的类,Stub才能生效,生成对象为Stub指定的对象。

示例如下,在被测试代码TestService1Impl类的genNoArg1()方法中调用了TestNonStaticNoArg1类的构造函数,因此需要在测试代码使用@PrepareForTest注解指定TestService1Impl类。可参考示例TestNStMConstructorNoArgPrepareClass、TestNStMConstructorNoArgPrepareMethod类。

// 测试代码
@PrepareForTest({TestService1Impl.class})

// 被测试代码
public class TestService1Impl implements TestService1 {

    @Override
    public TestNonStaticNoArg1 genNoArg1() {
        return new TestNonStaticNoArg1();
    }
}
1.1.3.3. 在被测试代码的内部类调用构造函数

被Stub的构造函数有可能在被测试代码的内部类中执行,例如在被测试代码中创建线程,在线程中调用构造函数;或在被测试代码中的命名内部类中调用构造函数,可参考被测试代码TestNonStatic1类test1、test2方法。

在被测试代码的内部类调用构造函数,在测试代码中不使用@PrepareForTest注解时,对构造函数的Stub不生效,生成对象为原始对象,可参考示例TestNStMConstructorNoArgNoPrepare2类。

在被测试代码的内部类调用构造函数,在测试代码中使用@PrepareForTest注解的value参数指定调用构造函数的内部类所在的类时,对构造函数的Stub不生效,生成对象为原始对象,可参考示例TestNStMConstructorNoArgNoPrepare2类。

在被测试代码的内部类调用构造函数,需要在测试代码中使用@PrepareForTest注解的fullyQualifiedNames参数指定调用构造函数的类所在的包,对构造函数的Stub才能生效,生成对象为Stub指定的对象。

示例如下,在被测试代码TestNonStatic1类test1()方法中创建线程执行TestNonStaticNoArg1类的构造函数,因此需要在测试代码使用@PrepareForTest注解的fullyQualifiedNames参数指定TestNonStatic1类所在的包。

// 测试代码
@PrepareForTest(fullyQualifiedNames = "com.adrninistrator.non_static.*")

// 被测试代码
public class TestNonStatic1 {
    private TestNonStaticNoArg1 testNonStaticNoArg1 = null;

    public TestNonStaticNoArg1 test1() {
        Thread thread = new Thread(() -> testNonStaticNoArg1 = new TestNonStaticNoArg1());
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            logger.error("error: ", e);
            Thread.currentThread().interrupt();
        }

        return testNonStaticNoArg1;
    }
}

示例如下,在被测试代码TestNonStatic1类的内部类TestNonStatic1Inner的testNew()方法中调用了TestNonStaticNoArg1类的构造函数,在TestNonStatic1类的test2()方法中调用了内部类TestNonStatic1Inner的testNew()方法,因此需要在测试代码使用@PrepareForTest注解的fullyQualifiedNames参数指定TestNonStatic1类所在的包。

// 测试代码
@PrepareForTest(fullyQualifiedNames = "com.adrninistrator.non_static.*")

// 被测试代码
public class TestNonStatic1 {
    public TestNonStaticNoArg1 test2() {
        return new TestNonStatic1Inner().testNew();
    }

    private class TestNonStatic1Inner {

        private TestNonStaticNoArg1 testNew() {
            return new TestNonStaticNoArg1();
        }
    }
}

可参考示例TestNStMConstructorNoArgPrepareName类。

关于@PrepareForTest注解的fullyQualifiedNames参数说明可参考前文。

1.1.4. Stub有参数构造函数

1.1.4.1. 有参数构造函数的Stub条件

对有参数构造函数进行Stub时,Stub条件可以使用PowerMockito.whenNew().withAnyArguments()、或PowerMockito.whenNew().withArguments()等方法。

  • Stub条件为任意参数

在对有参数构造函数进行Stub时,使用PowerMockito.whenNew().withAnyArguments()方法,可将对构造函数的Stub条件设置为,调用构造函数时使用任意参数均进行Stub。示例如下,可参考示例TestNStMConstructorWithArgNPAny类test1、test2方法,TestNStMConstructorWithArgWPAny类。

TestNonStaticWithArg1 testNonStaticWithArg1Mock = Mockito.mock(TestNonStaticWithArg1.class);
Mockito.when(testNonStaticWithArg1Mock.test1()).thenReturn(TestConstants.MOCKED);

PowerMockito.whenNew(TestNonStaticWithArg1.class).withAnyArguments().thenReturn
            (testNonStaticWithArg1Mock);
  • Stub条件为指定数量及指定类型的参数

在对有参数构造函数进行Stub时,使用PowerMockito.whenNew().withArguments()方法,并将withArguments()方法的参数设置为Mockito.any(参数类型.class),可将Stub条件设置为在调用构造函数时,若使用的参数数量类型满足要求则进行Stub。示例如下,可参考示例TestNStMConstructorWithArgNPAnyType类test1方法,TestNStMConstructorWithArgWPAnyType类test1方法。

TestNonStaticWithArg1 testNonStaticWithArg1Mock = Mockito.mock(TestNonStaticWithArg1.class);
Mockito.when(testNonStaticWithArg1Mock.test1()).thenReturn(TestConstants.MOCKED);

PowerMockito.whenNew(TestNonStaticWithArg1.class).withArguments(Mockito.anyString()).thenReturn(testNonStaticWithArg1Mock);
  • Stub条件为指定值的参数

在对有参数构造函数进行Stub时,使用PowerMockito.whenNew().withArguments()方法,并将withArguments()方法的参数设置为指定值,可将Stub条件设置为在调用构造函数时,若使用的参数等于指定值则进行Stub。示例如下,可参考示例TestNStMConstructorWithArgNPSpecified类test1方法,TestNStMConstructorWithArgWPSpecified类test1方法。

TestNonStaticWithArg1 testNonStaticWithArg1Mock = Mockito.mock(TestNonStaticWithArg1.class);
Mockito.when(testNonStaticWithArg1Mock.test1()).thenReturn(TestConstants.MOCKED);

PowerMockito.whenNew(TestNonStaticWithArg1.class).withArguments(TestConstants.FLAG1).thenReturn
        (testNonStaticWithArg1Mock);

withArguments()方法可以使用ArgumentMatchers接口的其他方法作为有参数构造函数的Stub条件,略。

1.1.4.2. 使用@PrepareForTest注解

Stub有参数构造函数时,对@PrepareForTest注解的使用情况与无参数构造函数类似。

  • 在测试代码调用构造函数,可以不使用@PrepareForTest注解,Stub也能够生效。

对于Stub条件为任意参数,可参考示例TestNStMConstructorWithArgNPAny类test1、test2方法,

对于Stub条件为指定数量及指定类型的参数,可参考示例TestNStMConstructorWithArgNPAnyType类test1方法,

对于Stub条件为指定值的参数,可参考示例TestNStMConstructorWithArgNPSpecified类test1方法;

  • 在被测试代码执行被Stub的构造函数,需要在测试代码的类级别或方法级别使用@PrepareForTest注解指定被测试代码对应的类,Stub才能生效。

对于Stub条件为任意参数,可参考示例TestNStMConstructorWithArgNPAny类test3方法,TestNStMConstructorWithArgWPAny类;

对于Stub条件为指定数量及指定类型的参数,可参考示例TestNStMConstructorWithArgNPAnyType类test3方法,TestNStMConstructorWithArgWPAnyType类test1方法;

对于Stub条件为指定值的参数,可参考示例TestNStMConstructorWithArgWPSpecified类test1方法。

  • 在被测试代码的内部类调用构造函数,需要在测试代码中使用@PrepareForTest注解的fullyQualifiedNames参数指定构造函数所在的类所在的包,Stub才能生效,示例略。
1.1.4.3. 不满足有参数构造函数Stub条件

当使用PowerMockito.whenNew().withArguments()方法对有参数构造函数进行Stub时,当调用构造函数时的参数不满足Stub条件时,生成的对象为null。

对于Stub条件为指定数量及指定类型的参数,可参考示例TestNStMConstructorWithArgNPAnyType类test2方法,TestNStMConstructorWithArgWPAnyType类test2方法;

对于Stub条件为指定值的参数,可参考示例TestNStMConstructorWithArgNPSpecified类test2方法,TestNStMConstructorWithArgWPSpecified类test2方法。

1.1.5. 不支持对原始对象进行Stub

Stub操作需要对Mock或Spy对象执行,不支持对原始对象执行。当对原始对象进行Stub时,会出现异常。

例如对TestNonStatic1类的原始对象进行Stub,会出现以下异常:

TestNonStatic1 testNonStatic1 = new TestNonStatic1();

Mockito.when(testNonStatic1.test1()).thenReturn(null);
org.mockito.exceptions.misusing.MissingMethodInvocationException
when() requires an argument which has to be 'a method call on a mock'.

可参考示例TestNStMockRaw类。

1.2. Spy后Stub非静态方法

1.2.1. 生成非静态方法对应的类的Spy对象

参考“13. Spying on real objects”( https://static.javadoc.io/org.mockito/mockito-core/latest/org/mockito/Mockito.html#spy )。

Mockito类的spy()方法可以创建真实对象的Spy对象。Spy对象未被Stub的方法会执行真实方法。 Mockito不会将调用委托给传入的真实实例,而是创建真实实例的副本。当调用Spy对象的未Stub方法而不是调用真实实例的对应方法时,不会对真实实例产生影响。

1.2.2. Mockito.spy()方法比较

Mockito支持<T> T spy(T object)与<T> T spy(Class<T> classToSpy)方法,参数分别需要传入对象实例,或类的Class对象。Mockito类的spy()方法不支持传入Answer、MockSettings等参数。

  • 对实例执行spy

Mockito.spy()方法支持对某个类的实例执行,示例如下,可参考示例TestNStSpyCompare类test1方法。

TestNonStaticNoArg1 testNonStaticNoArg1Spy = Mockito.spy(new TestNonStaticNoArg1());
  • 对包含无参数构造函数类的Class对象执行Spy

Mockito.spy()方法支持对包含无参数构造函数类的Class对象执行, 会执行无参数构造函数 ,示例如下,可参考示例TestNStSpyCompare类test2方法。

TestNonStaticNoArg1 testNonStaticNoArg1Spy = Mockito.spy(TestNonStaticNoArg1.class);
  • 对不包含无参数构造函数类的Class对象执行Spy

Mockito.spy()方法不支持对不包含无参数构造函数类的Class对象执行,会出现异常。示例如下,可参考示例TestNStSpyCompare类test3方法。

Mockito.spy(TestNonStaticWithArg1.class);

异常信息示例如下:

org.mockito.exceptions.base.MockitoException
Unable to create mock instance of type 'TestNonStaticWithArg1'
org.mockito.creation.instance.InstantiationException
Unable to create instance of 'TestNonStaticWithArg1$MockitoMock$1139741189'.
Please ensure that the target class has a 0-arg constructor.

1.3. 对非静态方法进行Suppress

使用PowerMockito.suppress()方法支持对非静态方法进行Suppress。

1.3.1. Suppress构造函数

使用PowerMockito类的void suppress(Constructor<?> constructor)方法,可以对单个构造函数进行Suppress,使用PowerMockito类的void suppress(Constructor<?>[] constructors)方法,可以对构造函数数组进行Suppress。

被Suppress的构造函数会被禁止,调用被Suppress的构造函数时什么也不会做。

禁止构造函数不需要使用@PrepareForTest注解。

1.3.1.1. Suppress唯一的构造函数

使用PowerMockito.constructor()方法可以获取指定类的唯一的构造函数,在使用时需要指定类的Class对象,返回类型为Constructor<T>,当指定类存在多个构造函数时,会抛出TooManyConstructorsFoundException异常。

使用PowerMockito.suppress()方法Suppress类的唯一构造函数示例如下:

PowerMockito.suppress(PowerMockito.constructor(TestNonStatic3.class));

当类只包含一个构造函数时,Suppress成功,可参考示例TestNStSuppressConstructor1类test1方法。

当类只包含多个构造函数时,PowerMockito.constructor()方法会出现异常,异常信息示例如下。可参考示例TestNStSuppressConstructor1类test2方法。

org.powermock.reflect.exceptions.TooManyConstructorsFoundException
Several matching constructors found, please specify the argument parameter types so that PowerMock can determine which method you're referring to.
Matching constructors in class com.adrninistrator.non_static.TestNonStatic4 were:
com.adrninistrator.non_static.TestNonStatic4( )
com.adrninistrator.non_static.TestNonStatic4( java.lang.String.class )
1.3.1.2. Suppress全部的构造函数

使用PowerMockito.constructorsDeclaredIn()方法可以获取指定类的全部构造函数,返回类型为Constructor<?>[],在使用时需要指定类的Class对象。

使用PowerMockito.suppress()方法Suppress类的全部构造函数示例如下,可参考示例TestNStSuppressConstructorsDeclaredIn1类。

PowerMockito.suppress(PowerMockito.constructorsDeclaredIn(TestNonStatic3.class));
1.3.1.3. Suppress默认的构造函数

使用PowerMockito.defaultConstructorIn()方法可以获取指定类的默认构造函数,返回类型为Constructor<?>[],当指定的类不存在默认构造函数时,会抛出ConstructorNotFoundException异常,在使用时需要指定类的Class对象。

使用PowerMockito.suppress()方法Suppress类的默认构造函数示例如下:

PowerMockito.suppress(PowerMockito.defaultConstructorIn(TestNonStatic3.class));
  • 仅存在一个无参数构造函数类

对于仅存在一个无参数构造函数的类,PowerMockito.defaultConstructorIn()方法可获取到无参数构造函数,对其Suppress成功。可参考示例TestNStSuppressDefaultConstructorIn1类test1方法。

  • 存在多个构造函数的类

对于存在多个构造函数的类,PowerMockito.defaultConstructorIn()方法可获取到无参数构造函数,对其Suppress成功,对于有参数构造函数不会Suppress。可参考示例TestNStSuppressDefaultConstructorIn1类test2方法。

  • 无构造函数的类

对于无构造函数的类,会自动添加一个无参数构造函数,PowerMockito.defaultConstructorIn()方法可获取到无参数构造函数,对其Suppress成功。可参考示例TestNStSuppressDefaultConstructorIn1类test3方法。

  • 存在有参数构造函数,但不存在无参数构造函数的类

对于存在有参数构造函数,但不存在无参数构造函数的类,不会自动添加一个无参数构造函数,PowerMockito.defaultConstructorIn()方法无法获取到无参数构造函数,会出现异常,异常信息如下所示。可参考示例TestNStSuppressDefaultConstructorIn1类test3方法。

org.powermock.reflect.exceptions.ConstructorNotFoundException
Couldn't find a default constructor in com.adrninistrator.non_static.TestNonStaticWithArg2.
1.3.1.4. 使用SuppressCode.suppressConstructor()进行Suppress

PowerMockito.suppress()方法可以使用SuppressCode.suppressConstructor()方法替代,可参考示例TestNStSuppressConstructor2、TestNStSuppressConstructorsDeclaredIn2、TestNStSuppressDefaultConstructorIn2类。

【Java】使用PowerMockito mock static方法/new对象/mock对象的public或private方法的简单示例 PowerMockito简单实战,帮助编写测试用例。 阅读详情

相关推荐

Mockito源码浅析——核心逻辑

一、Mockito源码逻辑简介 Mockito是一个Mock框架,让你用简单干净的API写漂亮的测试代码。Mockito通过ByteBuddy动态字节码生成技术生成mock类型(你要模拟类的代理类),默认通过objenesis框架生成mock类型的对象实例,mock实例对象的所有方法都会调用MockHandlerImpl对象实例的handle方法。 该文章主要从三个部分进行讲解:mock代理对象创建,mock对象方法的打桩,mock对象方法的入参验证。 二、mock代理...

weixin_44182586的博客 1527

Mockito模拟访问非静态方法教程

package com.chenghong; /** * 测试非静态方法 */ public class Person { public void test01(){ System.out.println("test01"); } public void test02(){ if(getDepth()>1){ System.out.println("test02---大于2"); }else{

yuekangwei的博客 1067

深入解析与实践Mockito:Java单元测试的强大助手

Mockito是一种模拟框架,其核心概念是在测试过程中创建并使用“Mock对象”。Mock对象是对实际对象的一种模拟,它继承或实现了被测试类所依赖的接口或类,但其行为可以根据测试需求自由定制。控制其在测试环境下的行为,从而将注意力聚焦于类本身的逻辑验证上。

给自己一个smile 3379

Java单元测试实践-19.Mockito与PowerMock的其他功能

Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Mockito与PowerMock的其他功能 1.1. 获取Mock对象详细信息 Mockito提供了用于获取Mock对象详细信息的API,可参考 https://static.javadoc.io/org.mockito/mockito-core/latest/org/mockito/Mockito.html#mock

adrninistrat0r的博客 3931

【异常】单元测试框架Mockito提示MockitoException: Failed to release mocks This should not happen unless you are

要解决这个问题,你可以检查你的代码,确保正确使用Mockito框架和参数匹配器。确保你正确地创建了mock对象,并在需要的地方使用了正确的参数匹配器。如果你正在使用第三方的mock maker,请确保它与Mockito框架兼容,并按照其文档进行正确的配置和使用。具体来说,它指出在释放mock对象时出现了失败,并且给出了一个可能的原因是使用了第三方的mock maker。请注意,这只是一个示例,你需要根据你的具体情况进行适当的修改和调整。此外,它还提到了一个更具体的错误:无效的参数匹配器使用。

奶爸的编程之路,也就一周冷个三天 2796

单细胞分析(16)—— RNA Velocity 分析流程

RNA velocity 是一种强大的单细胞转录组分析工具,它可以预测细胞的未来状态,揭示发育轨迹,并用于探索细胞状态转换。RNA velocity 是一种通过单细胞 RNA 测序(scRNA-seq)数据推测细胞未来状态的分析方法。🚀**RNA velocity 提供了一个全新的角度来理解细胞的动态变化,为单细胞转录组分析带来了更深入的时空信息!

阅读文献,记录学习笔记 2980

java单元测试之mock篇

java单元测试之mock篇

qq_45887180的博客 1万+

GAMES101作业3-遇到的各种问题及解决方法

记录在做作业3时遇到的一些坑!以及最后的解决办法。

qq_41835314的博客 6817

JAVA单元测试Mock实践

本文介绍了Mock背景,常见的单元测试场景以及对应的测试方法,最后简单介绍了powermockit测试框架。理解本文内容,会带你入门java单元测试,其中第一章、第二章需要重点理解。

jainszhang的博客 6176

HDMI设计2----EDID and E-EDID

1,EDID是什么?有什么用? 图1 应用场景 如图1所示的应用场景,PC将视频信号发送 到我们的设备上,经过一系列的传输和切换,设备将视频信号发送到显示器或者投影机上,也就是说,我们的设备位于PC和显示器之间。首先,在输入端,设备需要让PC知道自己是能够接受输入视频信号的,让PC认为自己是一台显示器。如果不这样做的话,PC可能会拒绝输出任何视频信号的(VGA接口不需要EDID也能输出)。除此之外,设备还要告诉PC自己支持的显示时序。而在输出端,当设备需要自建输出时序而不是简单的复制...

Archar_Saber的博客 7990

基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程

地下车库 Cartongrapher 3D建图

yhy_yhy13053117的博客 3936

Java单元测试实践-06.Mock后Stub静态方法

1. Mock后Stub静态方法 以下使用PowerMockito对包含静态方法的类进行Mock,再使用Mockito/PowerMockito对静态方法进行Stub,可以改变被Mock/Stub方法的行为。 1.1. Mock包含静态方法的类 参考“Mocking static methods”( https://github.com/powermock/powermock/wiki/MockStatic#mocking-static-methods )。 使用PowerMockito对静态方法对应的类进

adrninistrat0r的博客 6818

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 394

java mock静态方法_java单元测试之:jmockit mock静态方法,mock依赖类

在介绍实际的例子之前,然我们先了解下什么是mock? 为什么mock?mock的中文含义是假装模仿, 在单元测试里面我们测试的是某个单元的逻辑,即某个方法内的执行结果是否符合我们的预期。有一些方法会依赖于第三方的包,例如在service方法中我们有可能会去调用数据库的执行结果,会取redis中缓存数据,也有可能会使用当前的系统时间,根据系统时间做一些逻辑处理。虽然方法的逻辑依赖于第三方的东西,但...

weixin_31232021的博客 2897

【YOLOv11改进- 主干网络】YOLOv11+WTConv(ECCV2024): 基于YOLOv11的主干网络改进,大感受野的小波卷积

论文提出了WTConv,这是一个使用级联小波分解的层,并执行一组小卷积核的卷积,每个卷积专注于输入的不同频率带,并具有越来越大的感受野。这个过程能够在输入中对低频信息给予更多重视,同时仅增加少量可训练参数。实际上,对于一个  的感受野,可训练参数数量只随着  的增长而呈对数增长。而WTConv与常规方法的参数平方增长形成对比,能够获得有效的卷积神经网络(CNN),其有效感受野(ERF)大小前所未有。

qq_41304809的博客 1401

2026滑块验证码终极实战:缺口检测算法+人机轨迹模拟,识别率从60%飙升至95%全方案

**摘要:2026年AIGC技术发展导致传统验证码失效,滑块验证码成为主流防护手段。本文深入分析了传统方案识别率低的原因,并提出多级检测融合和行为拟合优化方案。通过图像预处理优化、三级缺口检测引擎(差分图像法、Hu矩轮廓匹配、YOLOv8n模型兜底)将识别率提升至99.2%。同时针对轨迹模拟环节,设计了包含抖动特征、时间随机性和个体差异的行为模型,使通过率从12%提升至87%。该方案解决了传统方法在缺口定位精度和轨迹真实性方面的核心痛点,为应对新一代验证码风控提供了完整的技术框架。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1899

Mock实践 | Java单元测试

Mock(模拟的)是一种隔离测试类功能的方法。Mock测试不需要真实连接数据库,或读取配置文件,或连接服务器。Mock对象模拟真实服务,Mock对象会返回与传递给它的某个虚拟输入相对应的虚拟数据Mock方法来自 org.mockito.Mock,它表示可以Mock一个对象或者是接口。对于以下简单方法的Mock实例在类名上,鼠标右键,勾上要测试的方法,就会创建一个测试类@Test//mock方法来自org.mockito.Mock,它表示可以mock一个对象或者接口。

m0_59044499的博客 1631

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java单元测试中的Mock技术详解与实践

Mock(模拟)是一种单元测试技术,它通过创建虚拟对象来替代真实依赖项,从而使测试能够专注于当前单元的功能验证。Mock技术是现代单元测试不可或缺的工具,它通过虚拟依赖对象使测试更加专注、快速和可靠。Mockito作为Java领域最流行的Mock框架,提供了简洁而强大的API,能够满足绝大多数测试场景的需求。测试方法名应清晰表达测试意图4.避免Mock具体实现类:尽量对接口进行Mock5.及时清理:对于需要清理的Mock,使用@AfterEach进行重置6.

lqp577lqp的博客 1425

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java mock静态方法_java单元测试之Mock静态方法

java单元测试之Mock静态方法1.public final class AmountUtil {public static String CustomFormatWith2Digits(int amount) {return "1";}}2.引入依赖dependencygroupIdorg.mockito/groupIdartifactIdmockito-core/artifactIdvers...

weixin_39639698的博客 2012

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

PowerMock Mock 静态方法

– Start 假设我们有如下类。 package demo01; import java.util.List; public class BusinessService { public List<String> getAllUser() { return BusinessUtil.getAllUser(); } } 它调用如下的静态方法。 package de...

千里之行始于足下 3961

如何在Java Unit Test中mock 静态方法

在我们平时写单元测试的时候有时候需要mock掉类里面的部分或者全部静态方法,这个需要用到那一些jar呢?以及需要怎么样的配置呢。下面是一些关于这些方面的分享:    1. 假如我们有下面的一个类:Public class Demo { public static void method1 { ... } public static void method2 { ...

林大虫子的专栏 6407

有效使用Mock编写java单元测试

Java单元测试对于开发人员质量保证至关重要,尤其当面对一团乱码的遗留代码时,没有高覆盖率的单元测试做保障,没人敢轻易对代码进行重构。然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编写出容易测试的代码不但对开发人员的设计编码要求很高,而且代码中的各种依赖也常常为单元测试带来无穷无尽的障碍。 令人欣慰的是开源社区各种优秀的Mock框架让单元测试不再复杂,本文简单介绍EasyMoc

Tony Chen的专栏 10万+

Mockito:Java单元测试Mock框架

在进行单元测试时,如果依赖的服务尚未开发完成,或依赖的对象不方便构造,这时我们就需要模拟( Mock)对象。

秃了也弱了 1881

Java单元测试实践-20.Mock相关总结

Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. 单元测试Mock代码编写建议 按场景编写单元测试 在编写单元测试代码前,建议先详细整理对应交易的场景,可以使用思维导图或其他方式,再以此为基础,选择需要编写单元测试的场景,尽量覆盖全部的场景。 像业务代码一样编写单元测试代码 在编写单元测试代码时,应该像业务代码一样,对Mock代码进行封装,合理使用继承与多态,划

adrninistrat0r的博客 2646
上一篇: Java单元测试实践-09.Mockito的Stub参数条件
下一篇: Java单元测试实践-11.Mock后Stub Spring的@Component组件
adrninistrat0r
博客等级 码龄18年 395粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值