Springboot之单元测试

我爱海鲸 2025-03-03 15:08:17 暂无标签

简介JUnit、Mock

单元测试实战(四种覆盖详解、测试实例) - csonezp - 博客园 (cnblogs.com)

intellij IDEA常见问题汇总_failed to parse version of junit:junit: 4.13.2-CSDN博客

IDEA懒人必备插件:自动生成单元测试,太爽了!_squaretest idea-CSDN博客

2024-09-02 start

单元测试一直报null异常,后来搜到Test的包idea导错了。

java后端用mockito做单元测试,一直报错空指针问题【已解决】_mockitojunitrunner 入参 空指针-CSDN博客

end

 

2024-10-14 start:

import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.data.jpa.domain.Specification;

import java.util.*;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;


import org.junit.experimental.categories.Category;
import com.gmcc.msb.common.test.Essential;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;

@Category(Essential.class)  // Essential.class 可不写
@RunWith(MockitoJUnitRunner.class)

// controller的测试
【
    @Mock(lenient = true)
    private TestService mockTestService;

    @InjectMocks
    private TestController testControllerUnderTest;
】



@Test(expected = Exception.class)
// 抛异常
doThrow(new RuntimeException("error")).when(service).function(any(String.class));


        when(mockStringRedisTemplate.opsForValue()).thenReturn(valueoperations);
        when(mockStringRedisTemplate.opsForValue().get(any(String.class))).thenReturn(null);

IDEA单元测试插件SquareTest破解 - FinnHao - 博客园 (cnblogs.com)

end

2024-10-20 start:

<junit.version>4.12</junit.version>




        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <scope>test</scope>
        </dependency>

                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                </dependency>

 

end

2024-11-07 start:

     
  @Mock
    private EntityManager mockEm;



// jpql 单测mock
final TypedQuery<TestResponseVo> mockTypedQuery = mock(TypedQuery.class);
        when(mockEm.createQuery(any(String.class),eq(TestResponseVo.class))).thenReturn(mockTypedQuery);

        TestResponseVo testResponseVo = new TestResponseVo();
        testResponseVo .setValue("12345678910");


        List<OfficeImUserResponseVo> list = new ArrayList<>();
        list.add(testResponseVo );

        when(mockTypedQuery.getResultList()).thenReturn(list);

        final TypedQuery<Long> mockTypedCountQuery = mock(TypedQuery.class);
        when(mockEm.createQuery(any(String.class),eq(Long.class))).thenReturn(mockTypedCountQuery);

        when(mockTypedCountQuery.getSingleResult()).thenReturn(20L);

end

2024-11-12 start:

// 通过反射设置业务对象的值
        ReflectionTestUtils.setField(testUnderTest, "min", 0);
        ReflectionTestUtils.setField(testUnderTest, "max", 0);

end

2024-12-03 start:

模拟网络请求

import org.powermock.api.mockito.PowerMockito;

        URL url = new URL("http://example.com");
        String host = url.getHost();
        int port = url.getPort();
        if (port == -1) {
            port = 80; // 默认HTTP端口
        }

        // 使用PowerMock模拟Socket类
        PowerMockito.whenNew(Socket.class).withArguments(host, port).thenReturn(mock(Socket.class));

end

2024-12-09 start:

        Date pushTimeStart = new GregorianCalendar(2024, Calendar.DECEMBER, 9, 0, 10, 0).getTime();
        Date pushTimeEnd = new GregorianCalendar(2024,Calendar.DECEMBER,  12, 9, 11, 18).getTime();

// 返回值void时
doNothing().when(service).function(para1, para2);


     // okhttpclient的调用
import okhttp3.*;

        Request request = new Request.Builder().url("http://example.com/test/url/").build();
        Protocol protocol = Protocol.HTTP_1_0;
        ResponseBody responseBody = ResponseBody.create(MediaType.parse("application/json; charset=utf-8"), "{}");
        Response responseModel = new Response.Builder().code(200).body(responseBody).request(request).protocol(protocol).message("成功").build();

        Call mockCall = mock(Call.class);

        when(mockOkHttpsClient.newCall(any(Request.class))).thenReturn(mockCall);

        when(mockCall.execute()).thenReturn(responseModel);

end

你好:我的2025