JUnit单元测试

结果断言

java 复制代码
Assertions.assertEquals(Object expected, Object actual)
Assertions.assertDoesNotThrow(Executable executable)
Assertions.assertThrows(Class<T> expectedType, Executable executable)
Assertions.assertTrue(boolean condition)
Assertions.assertNotNull(Object actual)

Mock

java 复制代码
// 创建 Mock 对象
List<String> mockedList = mock(List.class);
        
// 设置 Mock 行为
when(mockedList.get(0)).thenReturn("first");
when(mockedList.size()).thenReturn(10);

// 使用参数匹配器
when(mockList.get(anyInt())).thenReturn("element");

// 静态方法
try (MockedStatic<UtilityClass> mockedStatic = mockStatic(UtilityClass.class)) {
        // Mock 静态方法
        mockedStatic.when(() -> UtilityClass.staticMethod("test"))
                   .thenReturn("mocked result");
        
        assertEquals("mocked result", UtilityClass.staticMethod("test"));
}

// 设置 Mock 行为:当调用 setString 方法时,什么都不做
Mockito.doNothing().when(ppstmt).setString(anyInt(), anyString());

// 构造方法
MockedConstruction<MyClass> myClassMockedConstruction = Mockito.mockConstruction(MyClass.class,
                     (mock, context) -> Mockito.when(mock.someMethod(anyString(), anyString(), anyString(), any())).thenReturn("xxx)))

读取测试文件

java 复制代码
public static String readFile(String filePath) {
        File jsonFile = UsFileUtils.getFile(filePath);
        StringBuilder stringBuilder = new StringBuilder();
        try {
            FileReader fileReader = UsFileUtils.getFileReader(jsonFile);
            char[] buffer = new char[1024];
            int length;
            while ((length = fileReader.read(buffer)) != -1) {
                stringBuilder.append(buffer, 0, length);
            }
            fileReader.close();
        } catch (Exception e) {
            log.error("read datasource.json fail, {}", ExceptionUtil.getExceptionInfo(e));
        }
        return stringBuilder.toString();
}

SpringBoot配置属性绑定测试

java 复制代码
@Test
void testGetInnerDataSourceMap() {
        Map<String, String> properties = new HashMap<String, String>() {{
            put("xxx.yyy.zzz1", "1");
            put("xxx.yyy.zzz2", "2");
            put("xxx.yyy.zzz3", "3");
        }};
        ConfigurationPropertySource source = new MapConfigurationPropertySource(properties);
        Binder binder = new Binder(source);
        BindResult<beanName> bindResult = binder.bind("xxx", beanName.class);
        DataSourceConfig boundProperties = bindResult.get();

        Assertions.assertEquals("1", boundProperties.getyyy().get("zzz1"));
        Assertions.assertEquals("2", boundProperties.getyyy().get("zzz2"));
        Assertions.assertEquals("3", boundProperties.getyyy().get("zzz3"));
}

@Configuration
@ConfigurationProperties(prefix = "xxx")
@Data
public class DataSourceConfig {
    private Map<String, String> yyy;
}

@TempDir临时目录注解,用于自动创建和清理临时目录

java 复制代码
@Test
void testClearFiles(@TempDir Path tempDir) {
        try {
            for (int i = 1; i <= 4; i++) {
                Path path = tempDir.resolve("tmpfile" + i);
                Files.createFile(path);
            }
        } catch (IOException e) {
            log.error("create files failed: {}", ExceptionUtil.getExceptionInfo(e));
        }
        FileAgeUtil.clearFiles(tempDir, 7L, ChronoUnit.DAYS, 3L);
        long count = 0;
        try (Stream<Path> paths = Files.walk(tempDir)) {
            count = paths.filter(Files::isRegularFile).count();
        } catch (IOException e) {
            log.error("count files failed: {}", ExceptionUtil.getExceptionInfo(e));
        }
        Assertions.assertEquals(3, count);
    }

通过Unsafe方法初始化对象

java 复制代码
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
MyClass myClass= (MyClass) unsafe.allocateInstance(MyClass.class);
相关推荐
网络毒刘3 天前
端到端:用 Cursor Agent 完成「小功能 + 单测 + PR 描述」并附人工验收清单
单元测试·agent·ai编程·cursor·工具实践
mont evergreen3 天前
RTMP 连接单元测试之旅
单元测试·音视频·源码解读
我就是不信4 天前
CuTest:轻量级 C 语言单元测试框架实战指南
c语言·单元测试·log4j
众链网络4 天前
大客流票务系统怎么防超卖:库存并发、候补队列与幂等设计的工程取舍
junit·架构
深念Y7 天前
rime-雾凇拼音-配置记录
linux·junit·软件·拼音·kde
虫无涯8 天前
Coverity 如何结合 GJB8114-2013使用?
git·单元测试·嵌入式测试·coverity·静态扫描
白山编程大哥10 天前
Lua 中使用 C 语言的用户自定义类型——userdata
c语言·junit·lua
茉莉玫瑰花茶10 天前
GO [ 单元测试 ]
golang·单元测试·log4j
测试员周周11 天前
【jev应用到测试】94 条 UI 报错交给 Jev,三档判对 85.1%,开单闸门定在 0.6
人工智能·python·测试工具·单元测试·测试用例
行者游学13 天前
Kong 插件,解决2.5.1不支持原生暴露url
junit·kong