精华内容
下载资源
问答
  • 但是代码需要调用这个遗留代码Util.getContextPDO,这是一个静态方法.请注意,在测试环境中,此Util.getContextPDO始终返回Exception,并且我打算通过始终返回虚拟IPDO来绕过此Util.getContextPDO().public class ...

    我需要使用Mockito测试handleIn()方法.

    但是代码需要调用这个遗留代码Util.getContextPDO,这是一个静态方法.

    请注意,在测试环境中,此Util.getContextPDO始终返回Exception,并且我打算通过始终返回虚拟IPDO来绕过此Util.getContextPDO().

    public class MyClass {

    public IPDO getIPDO()

    {

    return Util.getContextPDO(); // note that Util.getContextPDO() is a static, not mockable.

    }

    public String handleIn(Object input) throws Throwable

    {

    String result = "";

    IPDO pdo = getIPDO();

    // some important business logic.

    return result;

    }

    }

    最初我认为这可以通过使用类“MyClass”的spy()来实现,所以我可以模拟getIPDO()的返回值.以下是我使用spy()的初步努力

    @Test

    public void testHandleIn() throws Exception

    {

    IPDO pdo = new PDODummy();

    MyClass handler = new MyClass ();

    MyClass handler2 = spy(handler);

    when(handler2.getIPDO()).thenReturn(pdo);

    PDOUtil.setPDO(pdo, LogicalFieldEnum.P_TX_CTGY, "test123");

    IPDO pdoNew = handler2.getIPDO();

    Assert.assertEquals("test123,(PDOUtil.getValueAsString(pdoNew, LogicalFieldEnum.P_TX_CTGY)));

    }

    但是when(handler2.getIPDO()).thenReturn(pdo);抛出我想要避免的异常(因为handler2.getIPDO())似乎调用了真正的方法.

    关于如何测试这部分代码的任何想法?

    解决方法:

    将我的测试更改为:

    @Test

    public void testHandleIn() throws Exception

    {

    IPDO pdo = new PDODummy();

    MyClass handler = new MyClass ();

    MyClass handler2 = spy(handler);

    doReturn(pdo ).when( handler2 ).getIPDO();

    PDOUtil.setPDO(pdo, LogicalFieldEnum.P_TX_CTGY, "test123");

    IPDO pdoNew = handler2.getIPDO();

    Assert.assertEquals("test123,(PDOUtil.getValueAsString(pdoNew, LogicalFieldEnum.P_TX_CTGY)));

    }

    标签:java,junit,mockito

    来源: https://codeday.me/bug/20191001/1838488.html

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

    java单元测试之Mock静态方法

    1.

    public final class AmountUtil {

    public static String CustomFormatWith2Digits(int amount) {

    return "1";

    }

    }

    2.引入依赖

    dependency

    groupIdorg.mockito/groupId

    artifactIdmockito-core/artifactId

    version1.10.19/version

    scopetest/scope

    /dependency

    dependency

    groupIdorg.powermock/groupId

    artifactIdpowermock-api-mockito/artifactId

    version1.6.5/version

    scopetest/scope

    /dependency

    dependency

    groupIdorg.powermock/groupId

    artifactIdpowermock-module-junit4/artifactId

    version1.6.5/version

    scopetest/scope

    /dependency

    3.单元测试

    import org.junit.Assert;

    import org.junit.Before;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.mockito.Mockito;

    import org.powermock.api.mockito.PowerMockito;

    import org.powermock.core.classloader.annotations.PowerMockIgnore;

    import org.powermock.core.classloader.annotations.PrepareForTest;

    import org.powermock.modules.junit4.PowerMockRunner;

    import static org.mockito.Matchers.anyInt;

    import static org.mockito.Matchers.eq;

    import static org.mockito.MockitoAnnotations.initMocks;

    import static org.mockito.Matchers.anyObject;

    import static org.mockito.Mockito.when;

    @RunWith(PowerMockRunner.class)

    @PrepareForTest({AmountUtil.class})

    @PowerMockIgnore("javax.management.*")

    public class StaticClassTest {

    @Before

    public void setUp() throws Exception {

    initMocks(this);

    }

    @Test

    public void test1() throws Exception {

    this.mockResources();

    String s = AmountUtil.CustomFormatWith2Digits(1);

    Assert.assertTrue(s == "");

    }

    private void mockResources() throws Exception {

    PowerMockito.mockStatic(AmountUtil.class);

    PowerMockito.when(AmountUtil.CustomFormatWith2Digits(anyInt())).thenReturn("");

    }

    }

    java单元测试之Mock静态方法 相关文章

    java8-Stream filter操作:多个List取并集

    在项目中很容易遇到那种需要取并集或者交集的情况。 如果按照传统的方式,使用for循环嵌套for循环来操作,也可以实现。但是代码看起来没有那么优雅。 Java8提供了Stream的操作。 例如简单的递归查找。 根据当前的分类找到相对应的所有子级对象。 如果使用传

    Java ArrayList源码分析(含扩容机制等重点问题分析)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解。所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项目,专注 Java 后端面试题 + 解析 + 重点知识详解 + 精选

    JVM内存JAVA_OPTS

    示例代码: JAVA_OPTS=-server -Xms1536m -Xmx1536m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:PermSize=96m -XX:MaxPermSize=256m -Xmn500m -XX:MaxTenuringThreshold=5 JAVA_OPTS并不是一成不变的,不同的应用在不同的软硬件环境下,要想充分发挥应用的性

    什么是响应式编程,Java 如何实现

    我们这里用通过唯一 id 获取知乎的某个回答作为例子,首先我们先明确下,一次HTTP请求到服务器上处理完之后,将响应写回这次请求的连接,就是完成这次请求了,如下: public void request(Connection connection, HttpRequest request) { //处理request,省略

    深入浅出Java线程池:源码篇

    前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用。(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适)。本文则深入线程池的源码,主要是介绍ThreadPoolExecutor内部的源码是如何实现的,对Thread

    java学习笔记01

    Java学习笔记(1) MarkDown语法解析 标题 首先,写一篇完整的笔记是需要标题的。在Markdown里,标题分为一级~六级。 一级标题:输入#+空格+内容 二级标题:输入##+空格+内容 三级标题:输入###+空格+内容 接下来由此类推即可 字体 hello,word! 改为粗体:内

    变量、常量、运算符

    变量 java是一种强类型语言,每个变量都必须声明其类型 java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域 每个变量都有类型,类型可以是基本类型,也可以是引用类型 变量名必须是合法的标识符 变量声明是一条完整的语句,因此每一个声

    Java枚举

    一:Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等, Java 枚举类使用 enum 关键字来定义,各个常量使用逗号,来分割。 class Test2{ public static void main(String[] args) {

    JavaScript(3)

    6、操作BOM对象(重点) 浏览器介绍 JavaScript和浏览器关系 JavaScript诞生就是为了能够让他在浏览器中运行! BOM:浏览器对象模型 浏览器内核: IE 6~11 Chrome SAfari FireFox 第三方浏览器(使用上述内核): QQ浏览器 360浏览器 window (重要) window

    Javadoc生成文档

    1 package com.lin.base; 2 3 /** 4 * @author Lin 5 * @version 1.0 6 * @since 11 7 */ 8 public class Doc { 9 String name;10 11 /**12 *13 * @param name14 * @return15 * @throws Exception16 */17 public String test(String name)throws Exception{1

    展开全文
  • 我有一个类FileGenerator,我正在为generateFile()应该执行以下操作的方法编写测试:1)它应该调用静态方法getBlockImpl(FileTypeEnum)上BlockAbstractFactory2)它应该blockList从子类方法填充变量getBlocks()3)它...

    我有一个类FileGenerator,我正在为generateFile()应该执行以下操作的方法编写测试:

    1)它应该调用静态方法getBlockImpl(FileTypeEnum)上BlockAbstractFactory

    2)它应该blockList从子类方法填充变量getBlocks()

    3)它应该createFile从FileHelper传递String参数的最终帮助器类中调用静态方法

    4)它应该BlockController在blockList中调用每个的run方法

    到目前为止,我有这个空方法:

    public class FileGenerator {

    // private fields with Getters and Setters

    public void generateBlocks() {

    }

    }

    我正在使用JUnit,Mockito来模拟对象,并且尝试使用PowerMockito来模拟静态类和最终类(Mockito不能这样做)。

    我的问题是:即使没有中的实现,我的第一个测试(getBlockList()从调用方法BlockAbstractFactory)也通过了generateBlocks()。我已经实现了static方法BlockAbstractFactory(到目前为止,返回null),以避免Eclipse语法错误。

    如何测试是否在其中调用了静态方法fileGerator.generateBlocks()?

    到目前为止,这是我的测试班:

    @RunWith(PowerMockRunner.class)

    public class testFileGenerator {

    FileGenerator fileGenerator = new FileGenerator();

    @Test

    public void shouldCallGetBlockList() {

    fileGenerator.setFileType(FileTypeEnum.SPED_FISCAL);

    fileGenerator.generateBlocks();

    PowerMockito.mockStatic(BlockAbstractFactory.class);

    PowerMockito.verifyStatic();

    BlockAbstractFactory.getBlockImpl(fileGenerator.getFileType());

    }

    }

    展开全文
  • 单元测试 import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org...

    1.

    public final class AmountUtil {

    public static String CustomFormatWith2Digits(int amount) {

    return "1";

    }

    }

    2.引入依赖

    org.mockito

    mockito-core

    1.10.19

    test

    org.powermock

    powermock-api-mockito

    1.6.5

    test

    org.powermock

    powermock-module-junit4

    1.6.5

    test

    3.单元测试

    import org.junit.Assert;

    import org.junit.Before;

    import org.junit.Test;

    import org.junit.runner.RunWith;

    import org.mockito.Mockito;

    import org.powermock.api.mockito.PowerMockito;

    import org.powermock.core.classloader.annotations.PowerMockIgnore;

    import org.powermock.core.classloader.annotations.PrepareForTest;

    import org.powermock.modules.junit4.PowerMockRunner;

    import static org.mockito.Matchers.anyInt;

    import static org.mockito.Matchers.eq;

    import static org.mockito.MockitoAnnotations.initMocks;

    import static org.mockito.Matchers.anyObject;

    import static org.mockito.Mockito.when;

    @RunWith(PowerMockRunner.class)

    @PrepareForTest({AmountUtil.class})

    @PowerMockIgnore("javax.management.*")

    public class StaticClassTest {

    @Before

    public void setUp() throws Exception {

    initMocks(this);

    }

    @Test

    public void test1() throws Exception {

    this.mockResources();

    String s = AmountUtil.CustomFormatWith2Digits(1);

    Assert.assertTrue(s == "");

    }

    private void mockResources() throws Exception {

    PowerMockito.mockStatic(AmountUtil.class);

    PowerMockito.when(AmountUtil.CustomFormatWith2Digits(anyInt())).thenReturn("");

    }

    }

    原文:https://www.cnblogs.com/youngr/p/14380702.html

    展开全文
  • 但是代码需要调用这个遗留代码Util.getContextPDO,这是一个静态方法.请注意,在测试环境中,此Util.getContextPDO始终返回Exception,并且我打算通过始终返回虚拟IPDO来绕过此Util.getContextPDO().public class ...
  • 转载自:https://www.2cto.com/kf/201502/375549.html非静态方法(不带static)可以访问静态方法(带static),但是反过来就不行,为什么呢?public class test{public void static main(String args[]){method(); //会...
  • mock的中文含义是假装模仿, 在单元测试里面我们测试的是某个单元的逻辑,即某个方法内的执行结果是否符合我们的预期。有一些方法会依赖于第三方的包,例如在service方法中我们有可能会去调用数据库的执行结果,会取...
  • java导入静态方法

    2021-04-19 11:45:44
    刚刚获取到的知识 — java居然可以导入静态方法 测试导入是否成功的类 // 导入静态方法的语句,指定 import static com.example.demo.java.StaticMethod.sum; // java导入静态方法的练习 public class ...
  • java静态方法测试

    千次阅读 2016-05-26 09:30:09
    静态方法是在new之前就已经加载到内存地址中了,再次new对象时候这些静态属性或者静态方法不会再分配新的内存地址了,这些静态属性或者静态方法在多个对象中是共用的。 public class Common { private static ...
  • 展开全部使用junit测试Java静态32313133353236313431303231363533e4b893e5b19e31333337396237私有方法,通过以下案例进行分析:测试目标类如下:packagecn.outofmemory.junit;publicclassTestTarget{/***移除正则...
  • Java 中静态变量与静态方法今天在看单例模式时,《head first 设计模式》中提到了单例类的继承问题。因为单例类中的变量及构造单例的方法通常都是静态的,所以这里涉及到 “静态方法与变量的继承”。以前一直没关注...
  • TEST1/***测试静态变量和静态方法*@authorJasmine*/publicclassTestStatic{staticStringss="lily";staticvoidchangeStr(Stringstr){System.out.println("str2:"+str);str="welcome";System.out.println("str3:"...
  • 在自动化测试中,经常会用到静态方法和静态变量。那么什么是静态方法和静态变量呢?以及在什么情况下使用呢?下面来说一说 静态方法和静态变量是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象...
  • 我试图使用JUnit,Mockito和PowerMock来验证对java.sql.DriverManager.getConnection的调用。这是我的测试用例:@RunWith(PowerMockRunner.class)@PrepareForTest(DriverManager.class)public class ...
  • 我试图对一个类’A’进行单元测试,该类调用类’B’的静态方法.类’B’本质上具有google guava缓存,其在给定密钥的情况下从缓存中检索值(Object),或者使用服务适配器将对象加载到缓存中(在缓存未命中的情况下).服务...
  • 一般来说,Java中的静态方法无法用传统的Jmock进行单测,这也就给研发人员和测试人员造成了一定的困扰。本文介绍一种使用PowerMock执行静态方法单元测试的手段,其实网上也有使用如Mockito的方法,大家可以自行搜索...
  • 我有一个静态方法的类,我目前正在使用JMockit进行模拟.说它看起来像:public class Foo {public static FooValue getValue(Object something) {...}public static enum FooValue { X, Y, Z, ...; }}我有另一个类(让...
  • 2015-03-30 06:30:01阅读( 406 )测试目标类如下:package cn.outofmemory.junit;public class TestTarget {/*** 移除正则表达式中需要转义的字符* @param w word* @return 移除正则表达式中需要转义的字符* @author ...
  • 初学java(未学习面向对象)时我们可以定义一个类,类中可以写静态方法,调用时可以直接使用类名.方法名。而学了面向对象后,定义类之后,就需要创建对象并通过对象来调用类中的成员方法或构造方法。以下为静态方法...
  • 这是我的测试代码,表明你是对的,这篇文章有点过分谨慎:class Y {static synchronized void staticSleep() {System.out.println("Start static sleep");try {Thread.sleep(2000);} catch (InterruptedException e) {...
  • 3.写单元测试 import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.api.mockito....
  • 我有一个用例,其中迭代Java枚举和测试,该参数包含在枚举列表中,这是一个静态方法,此线程安全吗?public enum EnumType {ONE,TWO,THREE,FOUR,FIVE;public static boolean isValid(String input) {for (EnumType ...
  • 昨天晚上看书的时候,发现静态方法与非静态方法还是没弄清楚。 早上起来上网查了下资料。以下是自己转载了网络资料,当中代码部分是自己再次测试的。在这里与大家一起分享。 ----------------------------分割...
  • 静态方法导致的java.lang.NoSuchMethodError错误今天修改bug时,将变异出来的class文件直接发给测试进行测试,结果测试进行测试的时候抛出了一个java.lang.NoSuchMethodError错误,这个错误表明运行程序的时候,对象...
  • 静态方法不能访问非静态方法,非静态方法则是可以访问静态方法. PS:ArrayList方法有:remove,removeAll,add。addAll,get、 package collection接口测试; import java.util.*; public class ArraylistTEST{...
  • Java编译器(几乎)总是在编译时解析静态方法,这是一个普遍的事实.例如:public class Super {static void someMethod() {// Do something...}}public class Derived extends Super {// Some other methods, excluding...
  • Java静态方法(上下文)的使用

    千次阅读 2017-03-15 23:16:04
    从书中看了一下Java静态方法的使用以及使用注意事项,总结下来的注意事项义工有两点:1,静态方法中不能够直接调用非静态变量;2,非静态方法中可以直接调用静态变量;至于其他的情况,之前基本的代码中都做了测试...
  • 但是我测试的如下运行代码,却并没有运行此静态方法。 package com.learn.java.cc; class Static1{ static void sys1(){ System.out.println("hello!"); } } public class StaticDemo { public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,711
精华内容 684
关键字:

java测试静态方法

java 订阅