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

使用BigDecimal进行JUnit断言

基础概念

BigDecimal 是 Java 中用于高精度浮点数运算的类,位于 java.math 包中。它提供了任意精度的定点和浮点运算,避免了使用浮点数时可能出现的精度问题。

JUnit 是 Java 中最常用的单元测试框架之一,它允许开发者编写和运行可重复的测试。

相关优势

  • 精度BigDecimal 提供了精确的数值计算,适用于金融计算等对精度要求极高的场景。
  • 灵活性BigDecimal 允许指定小数位数和舍入模式,提供了灵活的数值处理能力。
  • 测试可靠性:使用 JUnit 进行断言可以确保代码的正确性,提高软件质量。

类型

BigDecimal 主要有以下几种构造方法:

  • BigDecimal(int):从整数创建 BigDecimal
  • BigDecimal(double):从双精度浮点数创建 BigDecimal(注意可能会有精度损失)。
  • BigDecimal(String):从字符串创建 BigDecimal

应用场景

  • 金融计算:如银行转账、利息计算等。
  • 科学计算:需要高精度计算的场景。
  • 货币处理:涉及货币金额的计算。

示例代码

假设我们有一个简单的类 Calculator,其中包含一个方法 add 用于两个 BigDecimal 的加法运算:

代码语言:txt
复制
import java.math.BigDecimal;

public class Calculator {
    public BigDecimal add(BigDecimal a, BigDecimal b) {
        return a.add(b);
    }
}

我们可以使用 JUnit 编写测试用例来验证这个方法的正确性:

代码语言:txt
复制
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.math.BigDecimal;

public class CalculatorTest {

    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        BigDecimal a = new BigDecimal("1.23");
        BigDecimal b = new BigDecimal("4.56");
        BigDecimal expected = new BigDecimal("5.79");
        assertEquals(expected, calculator.add(a, b));
    }
}

遇到的问题及解决方法

问题:BigDecimal 比较时出现不一致

原因BigDecimalequals 方法比较的是数值和精度,而 compareTo 方法只比较数值。

解决方法:在进行断言时,使用 compareTo 方法而不是 equals 方法。

代码语言:txt
复制
assertEquals(0, actual.compareTo(expected));

问题:精度丢失

原因:使用 BigDecimal(double) 构造方法时,可能会因为双精度浮点数的表示方式导致精度丢失。

解决方法:使用 BigDecimal(String) 构造方法来避免精度丢失。

代码语言:txt
复制
BigDecimal a = new BigDecimal("1.23");

参考链接

通过以上内容,你应该能够全面了解 BigDecimal 在 JUnit 断言中的应用及其相关问题。

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

相关·内容

Junit 4 Tutorials(Junit 4 教程) 三、Junit4 断言方法

Junit 4 断言方法允许检查测试方法的期望结果值和真实返回值。Junit的org.junit.Assert类提供了各种断言方法来写junit测试。...下列一些有用的断言方法列表: Method Description assertNull(java.lang.Object object) 检查对象是否为空 assertNotNull(java.lang.Object...4断言方法样例 AssertionsTest.java junit测试用例,显示各种断言方法: import static org.junit.Assert.*; import java.util.ArrayList...Junit测试框架介绍 Junit Eclipse教程 Junit 4注解 Junit 4断言方法(Assert methods) Junit 4参数化测试 Junit 4测试套件(Test Suite...) Junit 4忽略测试(Ignore Test) Junit 4超时测试(Timeout Test) ------------------------------------------------

93320
  • Junit5系列-Junit5中Assertions断言类

    ,所以工作过程中完全可以使用Assertions代替Assert类。...其包名称为:org.junit.jupiter.api.Assertions Assertions中提供的方法都是静态方法,我们可以通过import静态资源进行使用,例如: import static...案例解析 下面对Assertions进行一个简单的应用 代码的注释都很清楚,就不再多说了 import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test...Assertions将测试方法集中在该方法内,不仅便于管理,还减少代码的复杂度,性能没有任何影响,为什么要去直接使用AssertNull等类呢,嘿嘿 最后:当然,Assertions提供的断言方法虽然多...,但有时候还是不够的,当Junit5不支持你的单元测试需求时,Junit5官方还是鼓励程序员去使用第三方支持库的,比如:AssertJ、Hamcrest,Truth等。。。。

    3.7K21

    jmeter:利用beanshell进行多重断言

    在接口测试中,我们对返回结果的正确性判断一般是基于响应报文的返回内容进行断言。但有些时候,按照正常的业务逻辑来说,一个请求返回的内容是多种不同的。...一、响应断言 以用户注册功能作为例子,从下面两种场景来进行接口测试: 1、假设用户不存在,接口设计逻辑,注册成功返回的内容是这样: {"code":200,"msg":"success"},"status...2、假设用户已存在,那么在测试该功能时,使用响应断言,返回的内容如下: ? 从业务逻辑来说,无论注册成功还是用户已存在,这都是正常的业务场景。...code); if(code==200||code>=20000000){ SampleResult.setSuccessful(true); } 内容仅供参考,请根据具体场景和接口设计逻辑,使用...beanshell断言。。。

    1.5K30

    BigDecimal使用总结

    1.创建对象 使用new的方式创建BigDecimal对象 BigDecimal a = new BigDecimal("100");//字符串构造 另外建议数值运算使用字符串的方式创建对象,因为:...因此,比较而言,通常建议优先使用String构造方法 另外,当你用了非字符串构造创建了一个BigDecimal对象时,如果进行了除运算,当结果有余数的时候会报java.lang.ArithmeticException...intValue() 3.保留小数 在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参数 divide(BigDecimal,"保留小数点后几位小数","...)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用...ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为

    84930

    JUnit+EclEmma进行覆盖测试

    在测试驱动的开发方式中,软件工程师在编写功能代码之前首先编写测试代码,这样能从最开始保证程序代码的正确性,并且能够在程序的每次演进时进行自动的回归测试。...测试的覆盖率是测试质量的一个重要指标,我们需要工具来帮助我们进行对软件测试覆盖的考察。 EclEmma就是这样一个能帮助开发人员考察测试覆盖率的优秀的Eclipse开源插件。...Emma是一个在SourceForge上进行的开源项目(参阅参考资源)。从某种程度上说,EclEmma可以看作是Emma的一个图形界面。在本文的参考文献中,可以看到专门讲述使用Emma的技术文章。...举例来说,我们有优秀的集成开发环境Eclipse,有开源的JDK,有单元测试工具JUnit,有Ant这样的项目管理工具,还可以用CVS或SubVersion来进行源代码版本的维护。...但是Emma具有一些非常优秀的特性使得它更适合被广泛的使用。和Coverlipse等工具比起来,Emma是开源的,同时它对应用程序执行速度的影响非常小。

    9010

    在Eclipse中使用JUnit5进行单元测试

    JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。...Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。 我的理解就是 使用JUnit可以对类里面的某一个方法进行单独测试,这样在查询错误的时候可以很方便的对模块进行测试。...下面用一个简单的例子解释一下如何使用Junit5进行单元测试: 首先在eclipse里创建一个名为“Ives”的Java工项目,创建一个包为hello,下面包含一个名为”Expression”的类。...的库 到此Finish即可,项目结构里面就会引入JUnit5的库,接下来开始对方法进行测试 右键待测试类,创建新的对应的Test文件 然后可以看到test包下面多了一个...ExpressionTest类,里面包含所勾选的待测方法,注意方法上面的注解“@Test”是必须要有的,方法体里面只需要修改为要测试的内容,细心地你可能会发现,这个测试类里面不包含main方法,但是仍然是可以进行测试的

    1.4K10

    Java开发中商业计算请务必使用BigDecimal来进行计算!

    这里小胖哥要提醒你,商业计算请务必使用`BigDecimal`,浮点做商业运算是不精确的。因为计算机无法使用二进制小数来精确描述我们程序中的十进制小数。...我们使用BigDecimal进行高精度算术运算。我们还将它用于需要控制比例和舍入行为的计算。如果你的计算是商业计算请务必使用计算精确的`BigDecimal` 。 3....因为货币没有比分更低的单位所以我们要使用精度和舍入模式规则对数字进行剪裁。java提供有两个类控制舍入行为`RoundingMode`和`MathContext` 。...格式化 数字格式化可通过操作类`java.text.NumberFormat`和`java.text.DecimalFormat`提供的api进行操作。...“,”——与模式“0”一起使用,表示逗号。注意一定不能在小数点后用,否则格式化异常。 7. 总结 今天对`BigDecimal`进行了总结归纳,这篇文章建议你收藏备用,也可以转给其他需要的同学。

    1.4K20

    在Eclipse中使用JUnit4进行单元测试

    于是有一个牛人推出了单元测试包,大大简化了进行单元测试所要做的工作,这就是JUnit4。本文简要介绍一下在Eclipse3.2中使用JUnit4进行单元测试的方法。   ...此例中,我们仅对“加、减、乘、除”四个方法进行测试。如下图所示:   之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。...这样写好之后,JUnit会自动进行测试并把测试结果反馈给用户。...同理,如果“在任何测试执行之后需要进行的收尾工作”也是一个Fixture,使用@After来标注。由于本例比较简单,没有用到此功能。   ...这是因为JUnit中有一个默认Runner,如果你没有指定,那么系统自动使用默认Runner来运行你的代码。

    74420

    Spring Boot中使用JUnit5进行单元测试

    今天我就系统完整地学习总结一下在Spring Boot中使用JUnit5框架进行单元测试。其实本节主要还是学习JUnit5的使用。有一句话说的好,我可以不用,但我必须会用。...我们在直接在类上使用@SpringBootTest注解就可以了。 3.断言机制 断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。...这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。 JUnit 5 内置的断言可以分成如下几个类别: 检查业务逻辑返回的数据是否合理。...而JUnit5提供了一种新的断言方式Assertions.assertThrows() ,配合函数式编程就可以进行使用。...利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。

    1.5K30

    Junit如何进行多线程测试

    这篇文章介绍Junit的一个扩展类库―――GroboUtils,这个类库被设计为来解决这些问题,并且使在Junit中进行单元测试成为可能。...Junit能在很多方面帮助你的开发团队―――在一些文章中已经包含了很多这方面的介绍。但从一个开者到另一个开发者,Junit实际上只专箸于两件事: 1、它强制你使用自己的代码。...当你写单元测试对你的代码进行压力测试时,你需要模拟许多并发事件,如果你在开发健壮的中间件,这样做是尤其重要的。对于这些组件,使用线程测试是一个好的想法。 不幸的是,Junit在这方面是不足的。...进行扩展处理多线程测试所必须的。...这样就强制Junit在线程执行任务的时候进行等待,从而巧妙的解决了我们前面提出的问题。让我们来看一下GroboUtils和Junit是怎样集成的。

    13110

    秒懂如何使用SpringBoot+Junit4进行单元测试

    一、目标 学会基于AssertJ的断言技术; 学会基于AssertJ-DB的数据库断言技术; 学会基于JMockit的mock技术; 学会内存和数据库的造数; 学会集成Maven进行单元测试、集成测试的执行...; 学会查看测试覆盖率; 二、断言技术 断言库包含很多,比如junit自带的、hamcrest等,这里推荐使用AssertJ,看它的官网就知道了,宣称fluent assertions java library..., "zhangsan"); // assertj-db执行如上Request中的SQL,对获取的数据进行断言 assertThat(request).row(0)....java-faker,可以对生活中常用的事物进行造数,使用简单,但无法满足复杂对象的造数; easy-random,可以对复杂对象进行造数,而且可以自定义造数的值类型和范围; jmockdata,可以对复杂对象进行造数...这里介绍使用Maven的插件进行单元测试运行的集成操作。

    1.9K30
    领券