国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

junit單元測試mock常用寫法-springboot與springmvc

這篇具有很好參考價(jià)值的文章主要介紹了junit單元測試mock常用寫法-springboot與springmvc。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

做單元測試時(shí)候,經(jīng)常會(huì)mock一些方法,得到期望的返回值,這里記錄一下常見的public、private、static方法,以及設(shè)計(jì)到的內(nèi)部調(diào)用的方法

一、依賴坐標(biāo)引入

這里采用maven,引入powermock即可

      <dependency>
          <groupId>org.powermock</groupId>
          <artifactId>powermock-module-junit4</artifactId>
          <version>2.0.9</version>
          <scope>test</scope>
      </dependency>
 
      <dependency>
          <groupId>org.powermock</groupId>
          <artifactId>powermock-api-mockito2</artifactId>
          <version>2.0.9</version>
          <scope>test</scope>
      </dependency>

二、BaseTest基類編寫

所有單元測試的測試類都繼成BaseTest即可

(1)springboot的示例

import com.abc.WebApplication;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.boot.test.context.SpringBootTest;

@RunWith(PowerMockRunner.class)
@SpringBootTest(classes = WebApplication.class)
public abstract class BaseTest {

}

(2)springmvc的示例

import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.test.context.ContextConfiguration;

@RunWith(PowerMockRunner.class)
@ContextConfiguration({"classpath:spring.xml","classpath:spring-mvc.xml"})
public class BaseTest {

}

三、單元測試編寫

有如下類需要編寫單元測試、有三個(gè)方法,分別是public、private、static,

mock的類涉及到private和static的,需要在測試類上增加注解@PrepareForTest({私有和靜態(tài)方法所在的類.class})

(1)需要被單測的類

import javax.annotation.Resource;
import org.springframework.stereotype.Service;

@Service
public class MockTestServiceImpl implements MockTestService {
	@Resource
	private RpcTestGoodPrice rpcTestGoodPrice;

    @Resource
	private TestUtil testUtil;
	
	public String queryRpcPrice(String skuId) {
		String queryRpcPrice = rpcTestGoodPrice.queryRpcPrice(skuId);
		return queryRpcPrice;
	}
	
	public void printRpcPrice(String skuId) {
		String queryRpcPrice = rpcTestGoodPrice.queryRpcPrice(skuId);
		System.out.println(queryRpcPrice);
	}

	private String queryRpcSkuPrice(String skuId) {
		String queryRpcPrice = rpcTestGoodPrice.queryRpcPrice(skuId);
		return queryRpcPrice;
	}

	public String querySkuName(String skuId) {
		String skuName = MockTestServiceImpl.getSkuName(skuId);
		return skuName;
	}
	
	public static String getSkuName(String skuId) {
		return "";
	}

    public void printRpcPrice(String skuId) {
		testUtil.printPrice(skuId);
	}
}

內(nèi)部涉及到需要調(diào)用的其它類?

import org.springframework.stereotype.Service;

@Service
public class RpcTestGoodPrice {

	@Resource
	private GoodPriceProvider goodPriceProvider;
	
	public String queryRpcPrice(String skuId) {
		PriceResult priceResult = goodPriceProvider.queryPrice(skuId);
		return priceResult.getPrice();
	}
}

(2)mock公有方法

import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.test.util.ReflectionTestUtils;

public class MockTestServiceImplTest extends BaseTest {

	@InjectMocks
	private MockTestServiceImpl mockTestServiceImpl;
	
	@InjectMocks
	private RpcTestGoodPrice rpcTestGoodPrice;
	
	@Mock
	private GoodPriceProvider goodPriceProvider;
	
	@Test
	public void testPublic() {
        //預(yù)先設(shè)置成員變量,可以寫在@Before中
		ReflectionTestUtils.setField(mockTestServiceImpl, "rpcTestGoodPrice", rpcTestGoodPrice);
		Mockito.when(goodPriceProvider.queryPrice(Mockito.any())).thenAnswer((m) -> {
			PriceResult result = new PriceResult();
			result.setPrice("22.99");
			return result;
		});
		String skuId = "12345679";
		String queryRpcPrice = mockTestServiceImpl.queryRpcPrice(skuId);
        Assert.assertEquals("22.99", queryRpcPrice);
	}
}

(3)mock私有方法

import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.springframework.test.util.ReflectionTestUtils;

@PrepareForTest({MockTestServiceImpl.class})
public class MockTestServiceImplTest extends BaseTest {

	@InjectMocks
	private MockTestServiceImpl mockTestServiceImpl;
	
	@InjectMocks
	private RpcTestGoodPrice rpcTestGoodPrice;
	
	@Mock
	private GoodPriceProvider goodPriceProvider;
	
	@Test
	public void testPrivate() {
		MockTestServiceImpl mockTestServiceImpl = PowerMockito.spy(new MockTestServiceImpl());
        //預(yù)先設(shè)置成員變量,可以寫在@Before中
		ReflectionTestUtils.setField(mockTestServiceImpl, "rpcTestGoodPrice", rpcTestGoodPrice);
		Mockito.when(goodPriceProvider.queryPrice(Mockito.any())).thenAnswer((m) -> {
			PriceResult result = new PriceResult();
			result.setPrice("22.99");
			return result;
		});
		String skuId = "12345679";
		try {
			PowerMockito.when(PowerMockito.spy(new MockTestServiceImpl()),"queryRpcSkuPrice", skuId).thenAnswer((m) -> {
				return "23.99";
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

(4)mock靜態(tài)方法

import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;

@PrepareForTest({MockTestServiceImpl.class})
public class MockTestServiceImplTest extends BaseTest {

	@InjectMocks
	private MockTestServiceImpl mockTestServiceImpl;
	
	@Test
	public void testStatic() {
		PowerMockito.mockStatic(MockTestServiceImpl.class);
		PowerMockito.when(MockTestServiceImpl.getSkuName(Mockito.anyString())).thenAnswer((m) -> {
			return "商品名稱";
		});
		String skuId = "12345679";
		String querySkuName = mockTestServiceImpl.querySkuName(skuId);
		Assert.assertEquals("商品名稱", querySkuName);
	}
}

(5)mock無返回值的方法

import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;

public class MockTestServiceImplTest extends BaseTest {

	@InjectMocks
	private MockTestServiceImpl mockTestServiceImpl;
	
	@Mock
	private TestUtil testUtil;
	
	@Test
	public void testVoidPublic() {
        //預(yù)先設(shè)置成員變量,可以寫在@Before中
		Mockito.doNothing().when(testUtil).printPrice(Mockito.any());
		mockTestServiceImpl.printRpcPrice("12345678");
	}
}

(6)mock線程池內(nèi)的方法

	public CmsResponse downloadData() {
		threadPool.execute(()-> {
			
		});
		return new Response(ResponseEnum.SUCCESS.getCode(),"下載中,請稍后");
	}

在單測中加入以下代碼,延緩主線程5-10秒,不然主線程結(jié)束后,子線程就結(jié)束了,單測執(zhí)行不了文章來源地址http://www.zghlxwxcb.cn/news/detail-433520.html

try {
			Thread.currentThread().join(8000);
		} catch (Exception e) {
			e.printStackTrace();
		}
    @Test
	public CmsResponse downloadDataTest() {
		downloadDataServiceImpl.downloadData();
        try {
			Thread.currentThread().join(8000);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

到了這里,關(guān)于junit單元測試mock常用寫法-springboot與springmvc的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot 使用Mock單元測試

    SpringBoot 使用Mock單元測試

    測試一般分為兩種黑盒測試和白盒測試。 ????????黑盒測試又稱為 功能測試 或 數(shù)據(jù)驅(qū)動(dòng)測試 ,測試過程中,程序看作成一個(gè)黑色盒子,看不到盒子內(nèi)部代碼結(jié)構(gòu)。 ????????白盒測試又稱為 結(jié)構(gòu)測試 或 邏輯驅(qū)動(dòng)測試 ,測試過程中,程序看作一個(gè)透明盒子,能夠看清

    2024年03月20日
    瀏覽(24)
  • SpringBoot 集成Junit單元測試

    SpringBoot 集成Junit單元測試

    學(xué)習(xí)文章: https://www.cnblogs.com/ysocean/p/6889906.html 開發(fā)工具: IDEA 2022.1.4 目錄 目錄 1. 概述 ?2. 實(shí)現(xiàn)步驟 ??????? 2.1 maven導(dǎo)入依賴 ???????? 2.2 隨意代碼演示(不推薦) ??????? 2.3 規(guī)范代碼演示(推薦) 3. Junit相關(guān)其他注解 4. 注意事項(xiàng) 5. 結(jié)語 ??????? 接觸到Junit,應(yīng)該是看

    2024年02月09日
    瀏覽(21)
  • junit單元測試 mybatis 單獨(dú)測試 springboot

    目錄 省流: 正文 一、直接測(無需配置掃描和xml) 1. 場景 2. 無需配置掃描,直接在測試類注入Mapper 3. 報(bào)錯(cuò) 補(bǔ)充: 關(guān)于@RunWith 常見的報(bào)錯(cuò): 1.包名不同導(dǎo)致報(bào)錯(cuò) test目錄下配置文件:application.yml中配置數(shù)據(jù)庫信息。 test目錄下各類:直接寫測試類即可,直接調(diào)用main目錄下各

    2024年02月07日
    瀏覽(25)
  • [Springboot 單元測試筆記] - Mock 和 spy的使用

    通常單元測試中,我們會(huì)隔離依賴對(duì)于測試類的影響,也就是假設(shè)所有依賴的一定會(huì)輸出理想結(jié)果,在測試中可以通過Mock方法來確保輸出結(jié)果,這也就引入另一個(gè)測試框架Mockito。 Mockito框架的作用就是模擬接口功能,并不運(yùn)行模擬接口的實(shí)際邏輯,而是直接輸出一個(gè)假定結(jié)果

    2024年02月13日
    瀏覽(17)
  • 【SpringBoot】mockito+junit 單元測試

    【SpringBoot】mockito+junit 單元測試

    CommonServiceImpl 在方法 getSourceCodeMap() 調(diào)用了 ServiceA 的方法 list(QueryBO queryBo) 。 org.mockito.exceptions.base.MockitoException: No tests found in ClientSyncServiceImplTest Is the method annotated with @Test? Is the method public? 解決方案: Test引入 org.junit.Test 不要引入 org.junit.jupiter.api.Test 例如獲取當(dāng)前用戶 moc

    2024年02月09日
    瀏覽(30)
  • Springboot 使用插件 自動(dòng)生成Mock單元測試 Squaretest

    Springboot 使用插件 自動(dòng)生成Mock單元測試 Squaretest

    很多公司對(duì)分支單測覆蓋率會(huì)有一定的要求,比如 單測覆蓋率要達(dá)到 60% 或者 80%才可以發(fā)布。 有時(shí)候工期相對(duì)緊張,就優(yōu)先開發(fā)功能,測試功能,然后再去補(bǔ)單元測試。 但是編寫單元測試又比較浪費(fèi)時(shí)間,有沒有能夠很大程度上自動(dòng)化生成單元測試的插件,自己改下就行

    2023年04月08日
    瀏覽(36)
  • SpringBoot測試(Junit單元測試、MockMvc測試Http請求 )

    SpringBoot測試(Junit單元測試、MockMvc測試Http請求 )

    Java知識(shí)點(diǎn)總結(jié):想看的可以從這里進(jìn)入 2.13、測試 測試就是在開發(fā)過程中用來檢測某一段代碼的功能是否能正確執(zhí)行,Spring Boot 項(xiàng)?創(chuàng)建時(shí)會(huì)默認(rèn)單元測試框架 spring-boot-test,它Spring Test、JUnit等其他測試框架結(jié)合起來(JUnit 5、AssertJ、Hamcrest、Mockito、JSONassert、JsonPath、Spring

    2024年02月06日
    瀏覽(49)
  • 13.Springboot整合junit5單元測試與生成單元測試覆蓋率

    13.Springboot整合junit5單元測試與生成單元測試覆蓋率

    現(xiàn)在基本大公司都要求單元測試了,保證我們代碼得質(zhì)量,而我司更是要求覆蓋率要達(dá)到60%以上,所以搞一下。 這里有兩個(gè)方法: 1.使用maven自帶得test,idea右側(cè)maven模塊執(zhí)行項(xiàng)目下得test 2.使用cmd命令,在你的項(xiàng)目pom文件所在目錄 ,打開cmd,執(zhí)行如下: 結(jié)果如下:打開site文

    2024年02月16日
    瀏覽(23)
  • springboot Junit單元測試默認(rèn)事務(wù)不提交

    因?yàn)橐郧翱傆X得Junit單元測試配置比較繁瑣,代碼功能大多使用main方法或者postman測試,直到最近才使用單元測試,在測試過程中遇到了事務(wù)不提交的問題,一直以為是代碼問題,后來才直到單元測試 默認(rèn)不提交事務(wù) ,記錄下來,防止以后再次踩坑。 如上,入庫操作不會(huì)實(shí)現(xiàn)

    2024年02月10日
    瀏覽(22)
  • SpringBoot 中如何利用 Junit 實(shí)現(xiàn)單元測試?

    SpringBoot 中如何利用 Junit 實(shí)現(xiàn)單元測試?

    2024軟件測試面試刷題,這個(gè)小程序(永久刷題),靠它快速找到工作了?。ㄋ㈩}APP的天花板)_軟件測試刷題小程序-CSDN博客 文章瀏覽閱讀2.5k次,點(diǎn)贊85次,收藏11次。你知不知道有這么一個(gè)軟件測試面試的刷題小程序。里面包含了面試常問的軟件測試基礎(chǔ)題,web自動(dòng)化測試、

    2024年03月11日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包