久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

每次使用 PowerMock 進(jìn)行測試后,模擬行為都會重置

Mocking behaviour resets after each test with PowerMock(每次使用 PowerMock 進(jìn)行測試后,模擬行為都會重置)
本文介紹了每次使用 PowerMock 進(jìn)行測試后,模擬行為都會重置的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在使用 PowerMock 編寫單元測試,模擬一些實(shí)用程序類的行為.為測試類定義一次行為(通過@BeforeClass 注解)原因:

I'm writing unit tests using PowerMock, mocking behaviour of some util classes. Defining behaviour once for test class (by @BeforeClass annotation) causes:

  • 第一次測試調(diào)用以返回模擬值
  • 第二次測試調(diào)用返回真正的方法返回值

示例代碼:

import org.junit.Assert;
import org.junit.BeforeClass;
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( {A.class, B.class})
public class TestMockedMethods {

private static B b;

@BeforeClass
public static void setUp() {
    PowerMockito.mockStatic(A.class);
    PowerMockito.when(A.getVal()).thenReturn("X");

    b = PowerMockito.mock(B.class);
    PowerMockito.when(b.getVal()).thenReturn("Y");
}

@Test
public void test1() { // PASS
    Assert.assertEquals("X", A.getVal());
    Assert.assertEquals("Y", b.getVal());
}

@Test
public void test2() { // FAIL
    Assert.assertEquals("X", A.getVal()); // actual="A"
    Assert.assertEquals("Y", b.getVal()); // actual="B"
}

}
class A {
  static String getVal() {
    return "A";
  }
}
class B {
  String getVal() {
    return "B";
  }
}

知道第二次測試失敗的原因嗎?

Any ideas why second test is failing?

推薦答案

PowerMockito.mockStatic(...)方法調(diào)用MockCreator.mock(...).此方法注冊一個(gè) Runnable,將在 每次測試后執(zhí)行:

The method PowerMockito.mockStatic(...) invokes MockCreator.mock(...). This method regsiters a Runnable that will be executed after each test :

MockRepository.addAfterMethodRunner(new MockitoStateCleaner());

這個(gè)runnable清除了Mockito的內(nèi)部狀態(tài):

This runnable cleans the internal state of Mockito :

private static class MockitoStateCleaner implements Runnable {
    public void run() {
        clearMockProgress();
        clearConfiguration();
    }

    private void clearMockProgress() {
        clearThreadLocalIn(ThreadSafeMockingProgress.class);
    }

    private void clearConfiguration() {
        clearThreadLocalIn(GlobalConfiguration.class);
    }

    private void clearThreadLocalIn(Class<?> cls) {
        Whitebox.getInternalState(cls, ThreadLocal.class).set(null);
        final Class<?> clazz = ClassLoaderUtil.loadClass(cls, ClassLoader.getSystemClassLoader());
        Whitebox.getInternalState(clazz, ThreadLocal.class).set(null);
    }
}

所以你應(yīng)該在每次測試之前執(zhí)行你的設(shè)置.

So you should execute your setUp before each test.

@Before
public void setUp() {
    PowerMockito.mockStatic(A.class);
    PowerMockito.when(A.getVal()).thenReturn("X");

    b = PowerMockito.mock(B.class);
    PowerMockito.when(b.getVal()).thenReturn("Y");
}

這篇關(guān)于每次使用 PowerMock 進(jìn)行測試后,模擬行為都會重置的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How to mock super reference (on super class)?(如何模擬超級參考(在超級類上)?)
Java mock database connection(Java 模擬數(shù)據(jù)庫連接)
Mockito ClassCastException - A mock cannot be cast(Mockito ClassCastException - 無法投射模擬)
Set value to mocked object but get null(將值設(shè)置為模擬對象但獲取 null)
How to mock DriverManager.getConnection(...)?(如何模擬 DriverManager.getConnection(...)?)
Mockito; verify method was called with list, ignore order of elements in list(模擬;使用列表調(diào)用驗(yàn)證方法,忽略列表中元素的順序)
主站蜘蛛池模板: 日韩成人中文字幕 | 色999日韩 | 91精品国产综合久久精品图片 | 成人av电影免费在线观看 | 色资源在线观看 | 天堂网中文字幕在线观看 | 久久久久一区二区三区 | 精品视频一区在线 | 亚洲激情第一页 | 久久九九99| av黄在线观看 | 亚洲天堂网站 | 久久精品国产一区二区电影 | 欧美美女一区二区 | 福利社午夜影院 | 欧美一区二区在线播放 | 日韩欧美国产成人一区二区 | 一二三四在线视频观看社区 | 99精品久久99久久久久 | 久久久久国 | 欧洲视频一区二区 | 亚洲综合精品 | 日本一区二区三区在线观看 | 国产免费一区二区三区最新6 | 日韩精品影院 | 亚洲三区视频 | 亚洲视频 欧美视频 | 国产高清视频一区二区 | 国产精品久久av | 亚洲精品一区二区三区丝袜 | 一区二区三区精品视频 | 精品国产一区二区三区日日嗨 | 9久久婷婷国产综合精品性色 | 日日噜噜夜夜爽爽狠狠 | 色综合激情 | 亚洲人在线 | 久久久久久国产 | 毛片免费看 | av黄色免费在线观看 | 日本韩国电影免费观看 | 99在线视频观看 |