单元测试实战(四种覆盖详解、测试实例) - 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-06-04 start:
jpa queryCandition查询单元测试:
// 1. 初始化所有Mock对象
Root<TestViewPo> root = mock(Root.class);
CriteriaBuilder criteriaBuilder = mock(CriteriaBuilder.class);
Path<Object> path = mock(Path.class);
Expression<Integer> integerExpression = mock(Expression.class);
Expression<String> stringExpression = mock(Expression.class);
Expression<Date> dateExpression = mock(Expression.class);
Expression<Boolean> booleanExpression = mock(Expression.class);
Predicate predicate = mock(Predicate.class);
Predicate likePredicate = mock(Predicate.class);
Predicate equalPredicate = mock(Predicate.class);
Predicate dateRangePredicate1 = mock(Predicate.class);
Predicate dateRangePredicate2 = mock(Predicate.class);
// 2. 配置Mock行为
when(root.get(anyString())).thenReturn(path);
when(path.as(Integer.class)).thenReturn(integerExpression);
when(path.as(Date.class)).thenReturn(dateExpression);
when(path.as(Boolean.class)).thenReturn(booleanExpression);
when(integerExpression.in(any(List.class))).thenReturn(predicate);
when(criteriaBuilder.like(any(), anyString())).thenReturn(likePredicate);
when(criteriaBuilder.equal(any(), any())).thenReturn(equalPredicate);
when(criteriaBuilder.greaterThanOrEqualTo(any(), any(Date.class))).thenReturn(dateRangePredicate1);
when(criteriaBuilder.lessThanOrEqualTo(any(), any(Date.class))).thenReturn(dateRangePredicate2);
end