精华内容
下载资源
问答
  • java单元测试之Mock静态方法

    千次阅读 2021-03-15 00:28:41
    单元测试 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

    展开全文
  • I have a class FileGenerator, and I'm writing a test for the generateFile() method that should do the following:1) it should call the static method getBlockImpl(FileTypeEnum) on BlockAbstractFactory2)...

    I have a class FileGenerator, and I'm writing a test for the generateFile() method that should do the following:

    1) it should call the static method getBlockImpl(FileTypeEnum) on BlockAbstractFactory

    2) it should populate variable blockList from the subclass method getBlocks()

    3) it should call a static method createFile from a final helper class FileHelper passing a String parameter

    4) it should call the run method of each BlockController in the blockList

    So far, I have this empty method:

    public class FileGenerator {

    // private fields with Getters and Setters

    public void generateBlocks() {

    }

    }

    I am using JUnit, Mockito to mock objects and I've tried using PowerMockito to mock static and final classes (which Mockito doesn't do).

    My problem is: my first test (calling method getBlockList() from BlockAbstractFactory) is passing, even though there is no implementation in generateBlocks(). I have implemented the static method in BlockAbstractFactory (returning null, so far), to avoid Eclipse syntax errors.

    How can I test if the static method is called within fileGerator.generateBlocks()?

    Here's my Test Class, so far:

    @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());

    }

    }

    解决方案

    I have no experience with PowerMock, but since you didn't get an answer yet I'm just been reading through the documentation to see if I can help you a bit on your way.

    I found that you need to prepare PowerMock so that I knows which static methods it needs to prepare to be mocked. Like so:

    @RunWith(PowerMockRunner.class)

    @PrepareForTest(BlockAbstractFactory.class) // <<=== Like that

    public class testFileGenerator {

    // rest of you class

    }

    Here you can find more information.

    Does that help?

    展开全文
  • 但是代码需要调用这个遗留代码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())似乎调用了真正的方法.

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

    展开全文
  • 转载自:https://www.2cto.com/kf/201502/375549.html非静态方法(不带static)可以访问静态方法(带static),但是反过来就不行,为什么呢?public class test{public void static main(String args[]){method(); //会...

    转载自:https://www.2cto.com/kf/201502/375549.html

    非静态方法(不带static)可以访问静态方法(带static),但是反过来就不行,为什么呢?

    public class test{

    public void static main(String args[]){

    method(); //会出错,提示你讲method方法改成静态的

    method2(); //调用方法正确

    new Test2().method(); //正确

    }

    public void method(){

    System.out.println("HelloWorld");

    }

    public static void method2(){

    System.out.println("HelloWorld");

    }

    }

    public class Test2{

    public void method(){

    System.out.println("HelloWorld");

    }

    }

    这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆内存中创建对象。所以说静态方法会随着类的加载而被加载。当你new一个对象时,该对象存在于对内存中,this关键字一般指该对象,但是如果没有new对象,而是通过类名调用该类的静态方法也可以。

    程序最终都是在内存中执行,变量只有在内存中占有一席之地时才会被访问,类的静态成员(变态和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有在类的对象禅师(创建实例)的时候才会分配内存,然后通过类的对象去访问。

    在一个类的静态成员中去访问非静态成员之所以会出错是因为在类的非静态成员不存在的时候静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。

    那类是什么时候被加载呢?在需要调用的时候被加载。

    当出现错误:No enclosing instance of type  is accessible. Must qualify the allocation with an enclosing  instance of type (e.g. x.new A() where x is an instance of).时

    很有可能就是这个原因

    展开全文
  • 展开全部使用junit测试Java静态32313133353236313431303231363533e4b893e5b19e31333337396237私有方法,通过以下案例进行分析:测试目标类如下:packagecn.outofmemory.junit;publicclassTestTarget{/***移除正则...
  • mock的中文含义是假装模仿, 在单元测试里面我们测试的是某个单元的逻辑,即某个方法内的执行结果是否符合我们的预期。有一些方法会依赖于第三方的包,例如在service方法中我们有可能会去调用数据库的执行结果,会取...
  • Java 静态方法static和非静态方法的区别.static 详解一、静态方法可以不用创建类的对象直接使用(需要导入类)Student.javapackage opp.staticFunction;public class Student {public static String say (){System.out...
  • 在这种情况下使用静态变量的一个问题是,如果您创建两个(或更多)MainLoop实例,编写看起来像它的代码只关闭其中一个实例,实际上将关闭它们:MainLoop mainLoop1 = new MainLoop();MainLoop mainLoop2 = new MainLoop()...
  • 我试图对一个类’A’进行单元测试,该类调用类’B’的静态方法.类’B’本质上具有google guava缓存,其在给定密钥的情况下从缓存中检索值(Object),或者使用服务适配器将对象加载到缓存中(在缓存未命中的情况下).服务...
  • Java – 同步静态方法

    2021-02-12 17:57:40
    这是我的测试代码,表明你是对的,这篇文章有点过分谨慎:class Y {static synchronized void staticSleep() {System.out.println("Start static sleep");try {Thread.sleep(2000);} catch (InterruptedException e) {...
  • 静态方法单元测试

    2021-09-22 21:18:16
    将mockito-core换成mockito-inline <dependency> <groupId>org.mockitogroupId> <artifactId>mockito-inlineartifactId> <version>3.6.0version> <scope>testscope> dependency> 先创建一个调用了静态方法的待测试类...
  • 1、静态代码块①、格式在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块:②、执行时机静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类...
  • java中经常有一些静态块,这是...a、在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创 建类的实例对象后才可使用,而静
  • 展开全部java主方法调用非静e68a84e8a2ad3231313335323631343130323136353331333365633864态方法的步骤:1、新建一个类,本例类名“NoStaticMethod”,声明一些成员变量,创建一个主方法main(),一个非静态方法Method...
  • 2015-03-30 06:30:01阅读( 406 )测试目标类如下:package cn.outofmemory.junit;public class TestTarget {/*** 移除正则表达式中需要转义的字符* @param w word* @return 移除正则表达式中需要转义的字符* @author ...
  • Java静态方法不依赖于具体的实例存在,所有不能直接使用this指针,需要别的方式间接的获取到类名。方法方法1:通过SecurityManager的保护方法getClassContext()private static String test1() {return new ...
  • 静态方法导致的java.lang.NoSuchMethodError错误今天修改bug时,将变异出来的class文件直接发给测试进行测试,结果测试进行测试的时候抛出了一个java.lang.NoSuchMethodError错误,这个错误表明运行程序的时候,对象...
  • java静态方法和成员

    2021-03-23 17:45:23
    1. 静态方法:成员变量分为实例变量和静态变量。其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量。而静态变量被该类所有的对象公有(相当于全局变量),不需要实例化就...
  • 静态方法 static修饰的成员方法 实例方法 没有用关键字static修饰的成员方法 对比 静态方法 实例方法 内存分配的空间 不同对象的同名静态方法分配了相应的入口地址——先分配 当类对象创建时才会被分配...
  • 结论及原因结论:Java调用静态方法时会对类进行装载、连接和初始化原因:Java类的加载方式是按需加载,遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始...
  • 我有一个静态方法的类,我目前正在使用JMockit进行模拟.说它看起来像:public class Foo {public static FooValue getValue(Object something) {...}public static enum FooValue { X, Y, Z, ...; }}我有另一个类(让...
  • 另外静态方法不能读取对象级别的信息,这个应该影响不大,需要读取对象级别的信息时自然就不会考虑静态方法了 \", \"extras\": \"\", \"created_time\": ①③①⓪⑤④⑨⓪④⑧ · \"type\": \...
  • 先上实例public classTestStatic {public static String staticString = "this is a static String"; //静态变量public String instanceString = "this is ...//实例变量//静态方法public static voidstaticMethod()...
  • 方法A调用静态方法B.我想模拟静态方法B.我知道之前已经问过这个问题,但我觉得Android从那时起已经成熟,必须有办法完成这么简单的任务,而无需重新编写我想测试的方法.这是一个例子,首先是我要测试的方法:public ...
  • 其实对于Java静态的引入,考虑目标是使用和运行的便捷,不需要再实例化,特别是一些工具性质的代码段。当不用再实例化时,就可以相当于直接使用,增加了公共代码复用的便捷性。从Java8开始,还支持了静态接口,使得...
  • } But IDEA tells me: Error:(44, 26) java: invalid method reference non-static method stream() cannot be referenced from a static context How can I fix it? 解决方案 The flatten method body and its ...
  • JAVA中,存在内部类和外部类,如果出现有static时,大家应注意:1、 静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问2、如果外部类的静态成员与内部类的成员名称相同,可通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 356,625
精华内容 142,650
关键字:

java测试静态方法

java 订阅