在单元测试中, Mockito 框架中 when() 和 given() 两者的作用和区别

MuleSoft知识总结-18.MUnit测试正常系(Test,Mock when,Assert that) 文章目录前言MUnitMock whenAssert That 前言 这个简单的案例已经基本开发完成,在开发完成后,开发人员要进行UT测试。在Mule APP中UT测试需要使用到官方提供的MUnit组件。本片教程将介绍如何使用MUnit对Mule APP进行测试。 MUnit 返回employeeapi.xml,右键点击APIkit Router选择Create Test… 在src/test/munit自动生成了employeeapi-apikit-test.xml文件,在右边的Mule Palett 阅读详情

在单元测试中,when() 和 given() 是 Mockito 框架中用于模拟依赖行为的核心方法,它们的作用完全相同,区别仅在于语法风格与可读性偏好。


一、when() 与 given() 的作用

方法作用
when(mock.method()).thenReturn(value)告诉 Mockito:当调用 mock 对象的某个方法时,返回指定的值。用于设置模拟行为。
given(mock.method()).willReturn(value)与 when() 完全等价,是 Mockito 为支持 BDD(行为驱动开发)风格 提供的别名。

✅ 本质相同:两者都用于“桩定”(Stub)一个模拟对象的方法返回值或行为,不会执行真实逻辑。


二、when() 与 given() 的区别

维度when()given()
来源Mockito 原生语法(传统)Mockito 为 BDD 风格引入的别名
语义风格命令式(Imperative):“当调用时,返回…”声明式(Declarative):“给定这个调用,应该返回…”
可读性通用,广泛使用更贴近自然语言,适合 BDD 团队
推荐场景传统 Java 开发团队偏好 Gherkin 语言(如 Cucumber)或强调可读性的团队
是否推荐✅ 推荐(主流、稳定)✅ 推荐(语义更清晰,但需团队统一)

📌 关键结论:
given() 是 when() 的语义增强版,两者功能完全一致。
在实际项目中,推荐统一使用一种风格,避免混用。


三、常见写法对比

场景when() 写法given() 写法
返回固定值when(mock.getService()).thenReturn("OK")given(mock.getService()).willReturn("OK")
抛出异常when(mock.process()).thenThrow(new Exception())given(mock.process()).willThrow(new Exception())
多次调用不同返回值when(mock.getValue()).thenReturn("A").thenReturn("B")given(mock.getValue()).willReturn("A").willReturn("B")
匹配任意参数when(mock.validate(anyString())).thenReturn(true)given(mock.validate(anyString())).willReturn(true)
匹配特定参数when(mock.calculate(100)).thenReturn(200)given(mock.calculate(100)).willReturn(200)

💡 willReturn() 是 thenReturn() 的 BDD 风格别名,willThrow() 是 thenThrow() 的别名。


四、推荐使用哪一个?

推荐指数说明
✅ 强烈推荐 given()在新项目或注重可读性、团队协作的场景中,given() 更接近自然语言,语义清晰、意图明确,尤其适合保险、金融等高合规要求的系统。
✅ 也可使用 when()在传统 Java 团队或遗留项目中,when() 更普遍,无需强制迁移。

📌 最终建议:
在你的团队中统一选择一种风格,并写入《编码规范》。
推荐新项目使用 given(),因为它更符合“给定前提,验证结果”的测试思维模型,与 BDD 流程天然契合。


五、综合性单元测试示例(保险核保系统)——使用 given() 风格

背景:在人身保险系统中,根据客户年龄、健康状态、理赔金额判断是否自动核保通过。

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.time.LocalDate;
import java.time.Period;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;

// 使用 MockitoExtension 自动注入 @Mock 和 @InjectMocks
@ExtendWith(MockitoExtension.class)
class AutoUnderwritingServiceTest {

    // 模拟外部依赖:健康评估服务
    @Mock
    private HealthAssessmentService healthAssessmentService;

    // 模拟外部依赖:理赔金额配置服务
    @Mock
    private ClaimLimitConfigService claimLimitConfigService;

    // 被测试的系统:自动核保服务
    @InjectMocks
    private AutoUnderwritingService underwritingService;

    // 每个测试前初始化(可选,因使用 @ExtendWith)
    @BeforeEach
    void setUp() {
        // Mockito 会自动处理,此处仅作说明
    }

    /**
     * 测试场景:客户年龄 30 岁、健康状态良好、理赔金额 40000 元 → 应自动通过核保
     * 使用 BDD 风格:Given... When... Then...
     * 重点:使用 given() 设置模拟行为,语义清晰
     */
    @Test
    void shouldApproveClaimWhenCustomerIsYoungHealthyAndAmountWithinLimit() {
        // Given:给定前提条件(模拟依赖行为)
        Long customerId = 1001L;
        LocalDate birthDate = LocalDate.now().minusYears(30); // 年龄30岁
        Double claimAmount = 40000.0; // 申请金额
        String expectedHealthStatus = "GOOD"; // 健康状态
        Double maxAllowedLimit = 50000.0; // 系统允许的最大金额

        // 使用 given() 模拟健康服务返回“良好”
        given(healthAssessmentService.getHealthStatus(customerId))
            .willReturn(expectedHealthStatus);

        // 使用 given() 模拟配置服务返回该年龄段的最高限额
        given(claimLimitConfigService.getMaxClaimLimitForAgeGroup(30))
            .willReturn(maxAllowedLimit);

        // When:执行被测试的方法
        UnderwritingResult result = underwritingService.evaluateClaim(customerId, birthDate, claimAmount);

        // Then:验证结果是否符合预期
        assertThat(result.isApproved()).isTrue(); // 核保应通过
        assertThat(result.getReason()).isEqualTo("客户年龄30岁,健康良好,金额在限额内");

        // 验证依赖被正确调用(行为验证)
        verify(healthAssessmentService, times(1)).getHealthStatus(customerId);
        verify(claimLimitConfigService, times(1)).getMaxClaimLimitForAgeGroup(30);
    }

    /**
     * 测试场景:客户年龄 65 岁 → 应拒绝自动核保
     * 使用 given() 模拟健康状态(虽不决定结果,但必须存在)
     */
    @Test
    void shouldRejectClaimWhenCustomerAgeExceeds60() {
        // Given:给定客户年龄超过60岁
        Long customerId = 1002L;
        LocalDate birthDate = LocalDate.now().minusYears(65); // 65岁
        String healthStatus = "GOOD"; // 健康状态不影响结果
        Double claimAmount = 10000.0;

        // 使用 given() 模拟健康服务调用(必须,否则报错)
        given(healthAssessmentService.getHealthStatus(customerId))
            .willReturn(healthStatus);

        // When:执行核保逻辑
        UnderwritingResult result = underwritingService.evaluateClaim(customerId, birthDate, claimAmount);

        // Then:验证结果
        assertThat(result.isApproved()).isFalse(); // 应拒绝
        assertThat(result.getReason()).isEqualTo("客户年龄超过60岁,需人工核保");
    }

    /**
     * 测试场景:健康评估服务抛出异常 → 系统应优雅降级,拒绝核保
     * 使用 given() + willThrow() 模拟异常分支
     */
    @Test
    void shouldFailGracefullyWhenHealthServiceThrowsException() {
        // Given:给定健康评估服务调用时抛出异常
        Long customerId = 1003L;
        LocalDate birthDate = LocalDate.now().minusYears(40);
        Double claimAmount = 25000.0;

        // 使用 willThrow() 模拟服务异常(BDD 风格)
        given(healthAssessmentService.getHealthStatus(customerId))
            .willThrow(new RuntimeException("健康系统连接失败"));

        // When:执行核保逻辑
        UnderwritingResult result = underwritingService.evaluateClaim(customerId, birthDate, claimAmount);

        // Then:验证系统未崩溃,返回拒绝结果
        assertThat(result.isApproved()).isFalse();
        assertThat(result.getReason()).isEqualTo("健康评估服务异常,请人工介入");
    }

    /**
     * 测试场景:理赔金额超过限额 → 应拒绝
     * 使用 given() 模拟动态配置值
     */
    @Test
    void shouldRejectClaimWhenClaimAmountExceedsMaximumLimit() {
        // Given:给定客户年龄35岁,但申请金额超出其限额
        Long customerId = 1004L;
        LocalDate birthDate = LocalDate.now().minusYears(35);
        Double claimAmount = 60000.0; // 超出限额
        Double maxLimit = 50000.0; // 实际允许限额

        // 使用 given() 模拟配置服务返回限额
        given(healthAssessmentService.getHealthStatus(customerId))
            .willReturn("GOOD");

        given(claimLimitConfigService.getMaxClaimLimitForAgeGroup(35))
            .willReturn(maxLimit);

        // When
        UnderwritingResult result = underwritingService.evaluateClaim(customerId, birthDate, claimAmount);

        // Then
        assertThat(result.isApproved()).isFalse();
        assertThat(result.getReason()).isEqualTo("理赔金额超出系统允许上限 50000.0");
    }

    /**
     * 测试场景:使用 any() 匹配任意参数,测试通用逻辑
     * 使用 given() 模拟模糊匹配
     */
    @Test
    void shouldReturnDefaultReasonWhenAnyHealthStatusIsProvided() {
        // Given:给定任意客户ID,健康状态为任意字符串,都返回“需人工核保”
        Long customerId = 1005L;
        LocalDate birthDate = LocalDate.now().minusYears(50); // 50岁
        Double claimAmount = 30000.0;

        // 使用 any() 匹配任意字符串参数(不关心具体值)
        given(healthAssessmentService.getHealthStatus(anyLong()))
            .willReturn("UNKNOWN");

        // 使用 anyInt() 匹配任意整数(年龄计算由服务内部处理)
        given(claimLimitConfigService.getMaxClaimLimitForAgeGroup(anyInt()))
            .willReturn(40000.0);

        // When
        UnderwritingResult result = underwritingService.evaluateClaim(customerId, birthDate, claimAmount);

        // Then
        assertThat(result.isApproved()).isFalse();
        assertThat(result.getReason()).isEqualTo("健康状况未知,需人工核保");
    }
}

六、为什么推荐使用 given()?——语义对比

传统写法BDD 写法优势
when(mock.get()).thenReturn("OK")given(mock.get()).willReturn("OK")given 更清晰表达“前提条件”
when(service.process()).thenThrow(ex)given(service.process()).willThrow(ex)willThrow 更贴近“预期行为”
when(repository.findById(1)).thenReturn(user)given(repository.findById(1)).willReturn(user)读起来像“给定 ID=1,返回用户”,像自然语言

✅ 在保险、金融等高合规系统中,代码的可读性就是可审计性。
given() 更容易让非技术人员(如测试、风控、合规)理解测试意图。


七、最佳实践总结

建议说明
✅ 统一使用 given()新项目优先采用,提升团队协作效率
✅ 避免混用 when() 和 given()同一项目中风格统一,减少认知负担
✅ willReturn() / willThrow() 是首选BDD 风格完整,语义更完整
✅ 每个测试都遵循 Given-When-Then 结构逻辑清晰,便于维护
✅ 配合 AssertJ 使用 assertThat()断言更流畅,如 assertThat(result).isApproved().and().hasReason("...")
✅ 用 any()、eq()、argThat() 精确匹配参数避免过度模拟导致测试脆弱

八、补充:如果团队坚持用 when()?

完全没问题!只要团队一致,when() 是行业标准。
但如果你正在引入新成员、或希望提升代码的“业务可读性”,given() 是更优选择。

🔚 最终建议:
在你的 Spring Boot 保险系统中,使用 given() + willReturn() + assertThat() 组合,
让你的单元测试不仅能跑通,更能被所有人读懂——这才是高质量代码的终极目标。

单元测试Mock中常见问题与解决方案 很久不写博客了,经常搜索前辈和晚辈写的问题解决方案,得到很多帮助,也受益匪浅,所以也时常感到愧疚。那么接下来一段时间,我也分享一些技术点,问题方案吧。闻道有先后,术业有专攻。也希望我们都能保持一颗谦卑的心向身边或网络上的人学习,因为每个人都有自己的闪光点……本篇单元测试暂时局限于mock、powermock,引用的jar包,大家自行百度吧。很简单。Demo样例,网上也多,后续我也可以给大家一些代码样例。 阅读详情

相关推荐

Mockito单元测试框架:核心API详解与实战避坑指南

在软件工程实践中,单元测试是保障代码质量、实现快速反馈的关键环节。其核心原理在于隔离被测代码与外部依赖,确保测试的独立性与稳定性。为实现这一目标,Mock测试技术应运而生,它通过创建模拟对象来替代真实依赖,从而让开发者能够专注于业务逻辑的验证。Mockito作为Java领域最流行的Mock框架,提供了强大的行为设定、参数匹配和交互验证能力,其技术价值在于显著提升测试代码的可维护性与执行效率。在微服务、企业级应用等复杂场景中,Mockito能有效模拟数据库访问、远程服务调用等不稳定依赖,是构建高质量测试套件的

weixin_30883311的博客 407

为什么重写equals时必须重写hashcode方法?

是为了提高比较的效率,采取重写hashcode方法,先进行hashcode比较,如果不同,就没有必要进行equals的比较,这样就大大减少equals比较的次数 如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况 ...

qq_45053091的博客 488

Java单元测试实战指南:从JUnit 5到Mockito的最佳实践

单元测试是软件工程中保障代码质量的核心实践,它通过隔离测试最小可执行单元,为开发者提供快速反馈。其核心原理在于通过Mock等技术模拟外部依赖,确保测试的独立性与执行效率,从而成为持续集成和敏捷开发流程的基石。在Java生态中,JUnit 5、Mockito和AssertJ构成了主流的测试工具链,它们共同支撑了测试驱动开发与重构安全网的技术价值。无论是Spring Boot服务、数据库交互层还是包含外部API调用的模块,遵循Given-When-Then模式与合理的测试分层策略,都能有效提升代码的健壮性与可维

weixin_30684743的博客 440

【JAVA-UT】18、when--指定mock对象的返回值

文|码术张 真实对象有自己的行为;mock对象没有。 于是拿到输入后,真实对象有输出,mock对象没有输出。 为了让mock对象模拟真实对象,就要给mock对象一个输出。 在Mockito中,如何给mock对象一个输出呢? 这就要用到when语句。 when语句常用的4种类型,一一介绍如下。 1 when(mockObject.methodA(input1)).thenReturn(output...

liangjing1000的专栏 5033

Java单元测试中Mock技术的核心原理与Mockito实战指南

在软件工程实践中,单元测试是确保代码质量的关键环节,其核心原则在于隔离性——即测试应聚焦于单一单元的逻辑,排除外部依赖的干扰。为实现这一目标,Mock(模拟)技术应运而生,它通过创建依赖对象的替身,预设其行为与返回值,从而将测试与数据库、网络服务等不稳定因素解耦。这一机制不仅大幅提升了测试执行速度与结果稳定性,更推动了测试驱动开发(TDD)的落地。作为Java生态中最主流的Mock框架,Mockito提供了强大的打桩(Stubbing)与行为验证(Verification)能力,遵循Given-When-T

weixin_34023982的博客 452

Java单元测试与Mockito实战:构建健壮代码的黄金法则

单元测试作为软件工程中的基础实践,其核心原理在于通过隔离最小可测试单元来验证代码逻辑的正确性。这项技术通过快速、独立、可重复的验证机制,为代码质量提供了关键保障。在Java开发领域,结合Mock技术能够有效模拟外部依赖,解决测试环境与生产环境差异的痛点,从而提升测试的可靠性和执行效率。JUnit与Mockito的组合已成为行业标准工具链,广泛应用于微服务、金融支付、电商系统等对代码健壮性要求极高的场景。掌握单元测试与Mock技术,不仅能确保核心业务逻辑的稳定性,还能显著提升开发效率和系统可维护性,是现代Ja

weixin_30755393的博客 371

JUnit+Mockito单元测试之打桩when().thenReturn();

什么是Mock 测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的对象(如 JDBC 中的ResultSet 对象,JPA的CRUDRepository,需要执行数据库操作的),用一个虚拟的对象(Mock 对象)来创建(覆盖方法返回)以便测试的测试方法。 JUnit 是一个单元测试框架。 ...

★【World Of Moshow 郑锴】★ 4万+

SpringBoot单元测试实战:JUnit5与Mockito构建高质量测试体系

单元测试是软件工程中保障代码质量的核心实践,它通过隔离测试单个代码单元来验证其逻辑正确性。其原理在于模拟外部依赖、控制测试输入并验证输出,从而构建快速反馈的安全网。在Java生态中,JUnit5作为现代测试框架,提供了参数化测试、动态测试等强大特性,而Mockito则专注于依赖模拟与行为验证,二者结合能显著提升测试的稳定性和可维护性。对于SpringBoot应用,这套组合的价值尤为突出,它能有效应对业务逻辑复杂、依赖众多的场景,确保代码在频繁迭代中依然可靠。通过合理运用测试切片(如@WebMvcTest)和

weixin_33901926的博客 409

单元测试中 when 与 given 的深度解析

本文深入解析了单元测试中when()与given()的异同。两者功能相同但风格不同:when().thenReturn()是Mockito传统语法,而given().willReturn()采用BDD(行为驱动开发)风格。文章通过代码示例展示了两种语法的多种用法,包括设置返回值、抛出异常、链式调用等。作者推荐使用BDD风格的given(),因其具有更好的可读性、更清晰的测试结构,并能更自然地表达测试意图。最后通过用户服务测试案例对比了两种风格的优劣,建议开发者采用BDD风格编写测试以提高代码质量。

python15397的博客 481

Java单元测试与集成测试实战:JUnit 5、Mockito与TestContainers深度指南

在软件开发中,测试是确保代码质量与可靠性的核心实践。其基本原理在于通过自动化验证,在代码变更时快速发现回归错误,保障系统行为的正确性。这一实践的技术价值在于提升代码的可维护性、支持安全重构,并最终降低长期维护成本。在Java开发领域,单元测试与集成测试是构建健壮应用的关键环节,广泛应用于Web服务、数据访问层及微服务架构的验证。本文聚焦于Java测试实战,详细解析如何运用JUnit 5框架组织测试用例,利用Mockito进行依赖模拟以实现隔离测试,并结合TestContainers工具进行真实数据库集成测试

weixin_30439067的博客 339

Java单元测试与集成测试实战:JUnit 5与Mockito核心技巧详解

在软件开发中,测试是保障代码质量与可靠性的关键实践。其核心原理在于通过自动化验证,确保代码在变更后仍能按预期工作,从而为重构和迭代提供信心。从技术价值看,良好的测试体系能显著降低缺陷率、提升系统可维护性。在Java开发领域,单元测试与集成测试是两种基础且重要的测试类型,分别聚焦于单个组件的逻辑验证与多组件间的协作。JUnit作为Java生态中最主流的测试框架,提供了丰富的注解和断言机制来组织测试用例;而Mockito则通过创建模拟对象(Mock),帮助开发者隔离被测对象的依赖,实现真正的单元测试。本文结合*

weixin_33937913的博客 328

mockito框架简单学习

mock框架有很多,这里去学习了mockito框架在日常开发中的使用以及一些使用注意事项简单使用1.stub打桩测试,通过触发定义好的stub描述条件,返回需要我们的行为2.spy 和 mock的区别 1.mock是针对类或接口,生成对应的代理对象。 如下述List接口 2.spy是基于真实对象来生成对应新代理对象 如下述是真实的ArrayList对象但用mock居多3.每...

zlj1217的博客 1791

Mockito单元测试实战:从核心概念到高级技巧

单元测试是软件质量保障的基石,其核心在于隔离被测代码与外部依赖,确保逻辑验证的纯粹性。通过模拟(Mocking)技术,开发者可以创建可控的测试替身,替代数据库、网络服务等难以构造或不稳定的依赖对象,从而实现快速、稳定的测试验证。Mockito作为Java领域广泛使用的模拟框架,通过打桩(Stubbing)定义替身行为,通过验证(Verification)检查交互过程,显著提升了单元测试的编写效率与可靠性。在微服务与分布式架构盛行的当下,Mockito能有效模拟外部API调用、消息队列等集成点,帮助开发者聚焦

weixin_34343308的博客 441

SpringBoot单元测试实战:JUnit与Mockito核心技巧与最佳实践

单元测试是保障软件质量、提升开发效率的基础设施,其核心在于通过隔离被测代码与外部依赖,聚焦验证业务逻辑的正确性。在Java生态中,JUnit提供了测试框架与运行环境,而Mockito则通过模拟(Mock)和打桩(Stub)技术,实现对依赖组件的精准控制,从而构建快速、稳定的测试防线。这一组合在SpringBoot项目中尤为重要,能有效应对自动装配、依赖注入等复杂场景,确保代码在迭代重构中的可靠性。本文基于SpringBoot、Mockito等热词,深入解析从环境搭建、断言使用到模拟验证的全流程,并分享参数匹

weixin_30654583的博客 352

SpringBoot单元测试实战:JUnit5与Mockito构建高质量代码保障体系

单元测试作为软件质量保障的核心环节,通过隔离测试单个代码单元来验证其逻辑正确性。其原理在于模拟外部依赖,聚焦被测对象行为,确保代码变更不会引入回归缺陷。在工程实践中,单元测试能显著提升代码可维护性,降低缺陷修复成本,并为持续重构提供安全网。尤其在微服务与分布式架构盛行的当下,单元测试成为保障服务稳定性的基础手段。本文以SpringBoot项目为背景,深入讲解如何运用JUnit5进行生命周期管理、参数化测试,并结合Mockito实现依赖模拟与行为验证,通过实战演示如何构建高效可靠的测试套件,并合理运用测试覆盖

weixin_34377919的博客 441

SpringBoot单元测试实战:JUnit5与Mockito高效测试业务逻辑

单元测试是软件工程中保障代码质量的核心实践,通过隔离被测单元并验证其行为是否符合预期,能够有效预防回归缺陷、支持安全重构。其原理在于利用测试框架组织测试用例,并通过模拟框架创建虚拟依赖对象,从而实现对单个类或方法的精准验证。在Java生态中,JUnit作为事实标准的测试框架,与Mockito模拟框架的组合,为SpringBoot应用提供了强大的单元测试能力。这种技术组合的价值在于提升开发效率、构建可重复验证的“活文档”,尤其适用于微服务架构下的业务逻辑层和数据访问层测试。本文聚焦于SpringBoot项目中

weixin_34354945的博客 350

Mockito核心API详解:从基础概念到高级场景的单元测试实践指南

在Java单元测试领域,Mock框架是模拟依赖对象行为、实现隔离测试的核心工具。其原理是通过动态代理或字节码增强技术创建虚拟对象,替代真实依赖,从而让开发者能够专注于被测单元的逻辑验证。这一技术的核心价值在于提升测试的可靠性、执行速度与可维护性,广泛应用于微服务、数据访问层及复杂业务逻辑的单元测试场景。深入理解Mock框架的API设计,特别是Mockito提供的流畅接口与BDD风格,能帮助开发者精准描述交互行为,有效应对静态方法模拟、参数匹配等高级场景,并从容处理常见的“self-attaching”等字节

417

VScode搭建Opencv(C++开发环境)

VScode配置Opencv一、准备软件二 、下载软件1、MinGw下载2、 Cmake下载3、Opencv下载三、编译1、cmake-gui2、make3、install四、 VScode配置1、launch.json2、c_cpp_properties.json3、tasks.json五、测试 用了半天事件,看了各种的博客终于配置成功了,在这里记录并分享一下,让更多的人少走弯路。 本次环境是Win 10. 一、准备软件 我们本次用到的3个软件,(建议读者文件路径,文件版本 尽量都和我相同,这样不容易出错

河旬的博客 8万+

Java单元测试Mock技术详解:从核心原理到Mockito实战

单元测试是保障软件质量的关键环节,其核心在于对最小可测试单元进行隔离验证。在测试过程中,外部依赖如数据库、网络服务等往往不可控,导致测试脆弱且低效。Mock技术通过创建模拟对象来替代真实依赖,实现了测试目标的隔离、行为的预设控制以及执行速度的显著提升。这一技术不仅解决了外部环境干扰问题,还能轻松模拟各种异常和边界场景,是构建健壮、可维护代码体系的重要工程实践。在Java生态中,Mockito以其优雅的API和强大的验证功能成为社区事实标准,广泛应用于日常开发。本文以订单服务场景为例,深入解析如何利用Mock

weixin_30417487的博客 301

[南大ICS]PA1 - 开天辟地的篇章: 最简单的计算机

task PA1.1: 实现单步执行, 打印寄存器状态, 扫描内存 task PA1.2: 实现算术表达式求值 task PA1.3: 实现所有要求, 提交完整的实验报告

qq_42474104的博客 1570

大模型推理常见采样策略:Top-k, Top-p, Temperature, Beam Search

大模型推理采样策略,举例通俗易懂汇总介绍

qq_43243579的博客 2万+
上一篇: 单元测试中 when 与 given 的深度解析
下一篇: 私有方法单元测试全面指南
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值