当前位置:  开发笔记 > 编程语言 > 正文

如何只模拟一个静态方法并测试另一个

如何解决《如何只模拟一个静态方法并测试另一个》经验,为你挑选了1个好方法。

下面的代码testMethod仅更改静态方法的行为,而不会影响其他静态方法.

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Foo.class })
public class Snipets {

    @Test
    public void hoge() throws Exception {

        PowerMockito.spy(Foo.class);
        PowerMockito.when(Foo.class, "testMethod").thenReturn("dummy");

        String actual = Foo.testMethod();
        assertEquals("dummy", actual);
    }

}

Foo.java

public class Foo {
    public static String testMethod() {
        return "foo";
    }
}

资料来源:https://gist.github.com/mid0111/8859159



1> cahen..:

下面的代码testMethod仅更改静态方法的行为,而不会影响其他静态方法.

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Foo.class })
public class Snipets {

    @Test
    public void hoge() throws Exception {

        PowerMockito.spy(Foo.class);
        PowerMockito.when(Foo.class, "testMethod").thenReturn("dummy");

        String actual = Foo.testMethod();
        assertEquals("dummy", actual);
    }

}

Foo.java

public class Foo {
    public static String testMethod() {
        return "foo";
    }
}

资料来源:https://gist.github.com/mid0111/8859159

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有