首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Mockito断言带有两个尾随零的BigDecimal

基础概念

Mockito 是一个 Java 测试框架,用于模拟对象和进行单元测试。它允许你在测试中创建和使用模拟对象,从而隔离被测代码,确保测试的可靠性和可重复性。

BigDecimal 是 Java 中用于高精度计算的类,特别适用于金融和货币计算。它提供了精确的数值计算,避免了浮点数计算中的精度问题。

相关优势

  1. Mockito
    • 隔离测试:通过模拟依赖对象,确保测试只关注被测代码。
    • 灵活性:可以轻松地模拟各种行为和返回值。
    • 简洁性:使用简洁的 API,使测试代码更易读和维护。
  • BigDecimal
    • 高精度:确保数值计算的精确性,避免浮点数计算中的精度丢失。
    • 灵活性:支持各种数值操作,如加、减、乘、除等。
    • 可控性:可以精确控制数值的舍入模式和精度。

类型

  • Mockito
    • Mock 对象:模拟依赖对象的行为。
    • Spy 对象:部分模拟对象,部分使用真实对象的方法。
  • BigDecimal
    • 基本类型:直接创建 BigDecimal 对象。
    • 字符串转换:通过字符串创建 BigDecimal 对象。

应用场景

  • Mockito
    • 单元测试中模拟依赖对象的行为。
    • 集成测试中隔离外部依赖。
  • BigDecimal
    • 金融和货币计算。
    • 需要高精度数值计算的场景。

示例代码

假设我们有一个方法 calculateInterest,它返回一个 BigDecimal 类型的利息值,我们希望测试这个方法返回的利息值是否带有两个尾随零。

代码语言:txt
复制
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import java.math.BigDecimal;
import java.math.RoundingMode;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

public class InterestCalculatorTest {

    @Test
    public void testCalculateInterestWithTwoTrailingZeros() {
        // 创建模拟对象
        InterestCalculator interestCalculator = Mockito.mock(InterestCalculator.class);

        // 定义模拟行为
        when(interestCalculator.calculateInterest()).thenReturn(new BigDecimal("123.4500"));

        // 调用方法并断言结果
        BigDecimal result = interestCalculator.calculateInterest();
        assertEquals(new BigDecimal("123.4500"), result);
    }
}

class InterestCalculator {
    public BigDecimal calculateInterest() {
        // 假设这里是复杂的计算逻辑
        return new BigDecimal("123.45").setScale(4, RoundingMode.HALF_UP);
    }
}

遇到的问题及解决方法

问题:为什么 BigDecimal 的尾随零在断言时可能会丢失?

原因BigDecimalequals 方法在比较时默认会忽略尾随零,这可能导致断言失败。

解决方法:使用 compareTo 方法进行比较,或者使用 stripTrailingZeros 方法去除尾随零后再进行比较。

代码语言:txt
复制
assertEquals(new BigDecimal("123.4500").stripTrailingZeros(), result.stripTrailingZeros());

参考链接

通过以上内容,你应该对使用 Mockito 断言带有两个尾随零的 BigDecimal 有了全面的了解。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 Junit + Mockito 实践单元测试

单元测试应该是一个带有隔离性的功能测试。在单元测试中,应尽量避免其他类或系统的副作用影响。 单元测试的目标是一小段代码,例如方法或类。...该方法执行被测代码,可以使用 JUnit 或另一个 Assert 框架提供的 assert 方法来检查预期结果与实际结果是否一致,这些方法调用通常称为断言或断言语句。...([message,]预期,实际) 检查两个变量是否引用同一对象 assertNotSame([message,]预期,实际) 检查两个变量是否引用了不同的对象 三、Mockito 框架 从上面的介绍我们可以认识到...而这正是 Mockito 的使命,Mockito 是一个流行的 mock 框架,可以与 JUnit 结合使用,Mockito 允许我们创建和配置 mock 对象,使用 Mockito 将大大简化了具有外部依赖项的类的测试开发...3.1 使用 Mockito 创建 mock 对象 Mockit o提供了几种创建 mock 对象的方法: 使用静态 mock() 方法 使用 @Mock 注解 如果使用 @Mock 注解,则必须触发创建带有

4.7K50
  • 如何使用调试与测试技巧:使用JUnit和Mockito简化单元测试

    摘要 在现代软件开发中,调试和测试是确保代码质量和可靠性的重要环节。对于Java开发者来说,JUnit和Mockito是两个非常常用的工具,它们能够显著简化单元测试,减少调试和测试中的复杂性。...单元测试通过自动化测试确保代码的正确性,及时发现潜在的BUG。而调试则帮助开发者定位和修复问题,使得开发过程更加高效。 在Java开发中,JUnit和Mockito是两个非常流行的测试工具。...Assertions:断言,验证方法的执行结果是否符合预期。 Test Runner:测试运行器,执行测试并报告测试结果。...ArithmeticException }); } } 1.3 运行测试 通过JUnit的@Test注解,我们可以轻松标记测试方法,使用assertEquals等断言方法进行验证...} } 2.3 Mockito的优势 通过使用Mockito,我们可以: 模拟外部依赖,避免实际的数据库或网络请求。

    8800

    SpringBoot基础(五):集成JUnit5

    查找主配置类的两种方式: 包扫描:默认情况下,@SpringBootTest 会从测试类所在的包开始,向上查找同一包或父包中带有 @SpringBootApplication或@SpringBootConfiguration...注解中使用classes属性显式指定应用的配置类 4、生成单元测试类 在需要生成单元测试的类中按Alt +Ins,选择test(测试) 选择测试方法 生成的测试类放入与本类相同的包结构下 三、常用注解...JUnit 提供了一组用于编写断言的方法,断言的使用可以帮助判断测试是否通过。...) { fail("Unexpected condition occurred"); } 11、带有消息参数的断言 JUnit的断言方法通常有一个变体,可以带有一个额外的字符串参数,用于在测试失败时提供错误消息...,而是使用模拟对象。

    10610

    Java单元测试Mock框架Mockito入门介绍

    鸡尾酒 Mockito是Java的单元测试Mock框架。它的logo是一杯古巴最著名的鸡尾酒Mojito,Mojito鸡尾酒,源自古巴的哈瓦那,带有浓厚的加勒比海风情。...Test Double是测试复制品,用来统称模拟真实对象的假对象。因使用场景有略微不同,而有这5种类型。 Dummy,通常只用来填充参数列表。有可能是null对象引用,或Object类实例等。...Stub,Stub用来替代SUT(System Under Test)依赖的组件,但是只模拟一个外部依赖,不做断言。 Spy,介于Stub和Mock之间。...,断言发出了1封邮件。...小结 本文首先介绍了Mockito是Java的单元测试Mock框架,然后比较了单元测试中Stub和Mock的区别,最后演示了Mockito如何使用。

    3.5K30

    Mockito鸡尾酒第一杯 Java单测Mock

    鸡尾酒 Mockito是Java的单元测试Mock框架。 它的logo是一杯古巴最著名的鸡尾酒Mojito, Mojito鸡尾酒,源自古巴的哈瓦那,带有浓厚的加勒比海风情。...Test Double是测试复制品,用来统称模拟真实对象的假对象。因使用场景有略微不同,而有这5种类型。 Dummy,通常只用来填充参数列表。有可能是null对象引用,或Object类实例等。...Stub,Stub用来替代SUT(System Under Test)依赖的组件,但是只模拟一个外部依赖,不做断言。 Spy,介于Stub和Mock之间。...,断言发出了1封邮件。...我们在实际使用的时候,不要被理论的概念限制了。Mockito为什么不能Stub,Stub不就是模拟外部依赖嘛,模拟了不就是Stub了嘛。

    89120

    Java四舍五入保留两位小数

    Java四舍五入保留两位小数 一、前言 环境 开发工具:IntelliJ IDEA JDK:1.8 二、正文 BigDecimal RoundingMode 算法 说明 ROUND_UP 舍入模式从零舍入...ROUND_DOWN 舍入模式向零舍入 ROUND_CEILING 舍入模式向正无穷大舍入 ROUND_FLOOR 舍入模式向负无穷大舍入 HALF_UP 舍入模式向“最近的邻居”舍入,除非两个邻居是等距的...,在这种情况下向上舍入 HALF_DOWN 舍入模式向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下向下舍入 HAIL_EVEN 舍入模式向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下...,向偶数邻居舍入 UNNECESSARY 舍入模式断言所请求的操作具有精确的结果,因此不需要舍入 代码 double num = 3333.445555; // BigDecimal BigDecimal...bigDecimal = new BigDecimal(num); bigDecimal = bigDecimal.setScale(2, RoundingMode.HALF_UP); System.out.println

    1.1K20

    Kotlin BigDecimal 精确计算

    在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。 注意,此舍入模式始终不会减少计算值的大小。 ROUND_DOWN 接近零的舍入模式。...ROUND_HALF_UP 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。...ROUND_HALF_EVEN 银行家舍入法 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。...此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。 如果前一位为奇数,则入位,否则舍去。 以下例子为保留小数点1位,那么这种舍入方式下的结果。...1.15>1.2 1.25>1.2 ROUND_UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入。

    4.7K20

    快速学会Springboot中编写Mock单元测试

    AssertJ: 一个java断言库,提供测试断言支持. Hamcrest: 对象匹配断言和约束组件. Mockito: 知名 Java mock 模拟框架....你使用的JUnit版本如果是JUnit 4不要忘记在测试类上添加@RunWith(SpringRunner.class),JUnit 5就不需要了。...您可以使用其webEnvironment 属性进一步优化测试的运行方式,webEnvironment 相关讲解: MOCK(默认):加载Web ApplicationContext并提供模拟Web环境。...注意事项:如果你的测试带有@Transactional注解时,默认情况下每个测试方法执行完就会回滚事务。...我们在Spring Boot maven项目的单元测试包test下对应的类路径 编写自己的测试类 ? 前两个注解不用说,第三个注解可能你们很陌生。这个是用来开启Mock Mvc测试的自动化配置的。

    7.1K10

    使用Spring Boot进行单元测试

    我们将带你学习如何以可测试的方式创建Spring Bean实例,然后讨论如何使用Mockito和AssertJ,这两个包在Spring Boot中都为了测试默认引用了。 本文只讨论单元测试。...使用Mockito来模拟依赖项 现在事实上的标准模拟库是 Mockito。它提供至少两种方式来创建一个模拟UserRepository实例,来填补前述代码的空白。...使用普通Mockito来模拟依赖 第一种方式是使用Mockito编程: private UserRepository userRepository = Mockito.mock(UserRepository.class...想看更多,文档 通过Mockito的@Mock注解模拟对象 创建一个模拟对象的第二种方式是使用Mockito的@Mock注解结合 JUnit Jupiter的MockitoExtension一起使用:...UserAssert引入assertThat方法的话,我们就可以使用新的、更可读的断言。

    2.4K30

    #Android单元测试学习总结「建议收藏」

    运行单个测试方法或多个测试类 二、Mockito测试框架的使用 1. Mock概念的理解 2. Mockito中几种Mock对象的方式 3....actual) 断言两个对象引用的不是同一个对象 assertNotSame(String message, Object expected, Object actual) 断言两个对象引用的不是同一个对象...] actual) 断言两个相同类型的数组的元素一一对应相等 assertArrayEquals(String message, T[] expected, T[] actual) 断言两个相同类型的数组的元素一一对应相等...mock出这两个对象,然后将Address对象传入到User当中,这样如果依赖的对象多了的话就相当麻烦,Mockito 提供了可以不用去手动注入对象的方法,首先使用@InjectMocks注解需要被注入的对象...Mockito是一样的,使用纯Mockito的api也可以完成这个测试。

    5.1K20

    算一算N阶乘的尾随零个数

    问题描述很简单: 求解N阶乘的尾随零个数 而所谓尾随零个数,即是从个位数开始,数字连续为0的个数. 譬如: 3!(阶乘符号,下同) = 3 * 2 * 1 = 6, 尾随零个数为0 5!...= 5 * 4 * 3 * 2 * 1 = 120, 尾随零个数为1 10!...= 10 * 9 * … * 1 = 3628800, 尾随零个数为2 OK,明白问题之后,我们就来尝试算一算吧~ 方法1 既然要求解阶乘值的尾随零个数,直观的方法就是首先算出阶乘值,然后对10取模来计算尾随零个数...;另外一种更轻量的方法则是直接从尾数零的性质入手: 考虑一下,一个数字A如果有一个尾数零,其实就是意味着A有一个10因子,如果有两个尾数零,则说明A有两个10因子(即有一个 10 * 10 = 100...,考虑数n1: n1 = N / 5 他表示的是1到N中带有因子5的数字的个数 但根据方法3中的讲述,我们需要求的是1到N中所有因子5的个数 怎么通过n1这种计算方式来计算因子5的总数呢?

    1.1K10

    大模型生成单测用例的评估方案

    生成成功的标志是: 1) 可以生成单元测试用例 2) 该用例可以被编译、执行通过 3) 被测方法被调用 4) 有断言 评估框架 类别 具体项 代码场景 对各种代码场景的覆盖 过程 用例的通过率和正确率%...结果 断言丰富度和数量 Mock丰富度 覆盖率(行覆盖/分支覆盖)% 1....因此目前已经将单测生成的插件在内部进行试点使用。当然,由于内部部署的模型规模要小很多,生成效果会进一步打折。...Mockito对数据库自增Id进行模拟) ·Mybatis数据库交互-从第三方获取Id,随后插入数据库中,返回值代表成功失败(期待使用 Mockito Capture验证中间过程值而不是只验证返回值)...筛选条件 方案 1 缺陷对应的测试用例优先保留 测试用例的方法上带有 @Bug 或者 @OnlineBug 的注解 2 接口覆盖率100%,应保留接口自动化覆盖的用例 每个接口至少要保留一个单接口的集成测试用例

    95710
    领券