๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Dev

[JUnit] JUnit์œผ๋กœ ์ƒํ’ˆ ์‚ญ์ œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

jcowwk 2025. 2. 23. 15:24

JUnit์œผ๋กœ ์ƒํ’ˆ ์‚ญ์ œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ


์ƒํ’ˆ ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

@Mock
private ProductRepository productRepository;

@InjectMocks
private ProductService productServiceUnderTest;

 

ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ํด๋ž˜์Šค ์•ˆ์— @Mock ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๊ฐ€์งœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋ฉ”์„œ๋“œ ์•ˆ์— @Test ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•ด์ฃผ๊ณ  Given-When-Then ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค.

 

- Given

UUID storeId = UUID.randomUUID();
UUID productId = UUID.randomUUID();

Store mockStore = new Store();
mockStore.setStoreId(storeId);

Product mockProduct = new Product();
mockProduct.setProductId(productId);
mockProduct.setProductName("๋”ธ๊ธฐ ์ผ€์ดํฌ");
mockProduct.setPrice(100);
mockProduct.setStore(mockStore);

when(productRepository.findById(productId)).thenReturn(Optional.of(mockProduct));

 

ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๊ฒƒ์„ Given ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

when๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

- When

boolean result = productServiceUnderTest.deleteProduct(productId);

 

ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›๋Š” ๊ณผ์ •์„ When ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

- Then

assertTrue(result);
verify(productRepository, times(1)).findById(productId);

 

ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ฆ๋ช…ํ•˜๋Š” ๊ณผ์ •์„ Then ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

assertTrue(result); ๋Š” result ๊ฐ’์ด true ์ด๋ฉด JUnit์ด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ต๋‹ˆ๋‹ค.

๋งŒ์•ฝ์— result ๊ฐ’์ด false ์ด๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜์—ฌ JUnit์—์„œ AssertionError ๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ต๋‹ˆ๋‹ค.


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo

junit.org

 

 

 

JUnit์„ ์ด์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)

์ด๋ฏธ์ง€ ์ถœ์ฒ˜(https://beststar-1.tistory.com/27๋‹จ์œ„ ํ…Œ์ŠคํŠธ: ์ž‘๊ณ  ๊ฒฉ๋ฆฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ธ”๋ก(์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ์ •ํ™•์„ฑ์„ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก \[์ถœ์ฒ˜]์ฆ‰, ์ฝ”๋“œ์˜ ์ตœ์†Œ ๊ธฐ๋Šฅ ๋‹จ์œ„(๋ณดํ†ต์€

velog.io

 

 

 

JUnit์œผ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ - ์‹ค์ „ํŽธ

JUnit์œผ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ - ์‹ค์ „ํŽธ

velog.io

 

๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค <3