使用Junit的Maven项目 - 检查银行账号

使用Junit的Maven项目 - 检查银行账号

所有的应用程序,无论大小,都需要经历源代码的构建、生成、编译和运行的一系列过程。这组过程由程序员手动执行。然而,随着 Apache Maven 项目的启动,所有这些流程都可以自动化,避免手动工作。因此,maven项目是一个开源工具,用于一次构建和部署多个项目,以提供更好的项目管理。

在本文中,我们将讨论用于检查银行帐号是否有效并使用 Junit 进行测试的 Maven 项目。

Junit 是什么?

JUnit 是一个开源单元测试框架,被世界各地的 Java 语言组织使用。在Java语言中,每次添加新的代码,都需要重新执行测试用例,这样的功能是由Junit框架来实现的。它用于用Java语言编写和执行自动化测试用例。

用于检查银行帐号的 Maven 项目

每当我们处理银行软件或相关应用程序时,一件强制性的事情就是验证帐号。要使帐号有效,需要满足三个条件。

三个条件如下 -

  • 银行帐号只能包含 14 位数字。

  • 帐号中的 14 位数字不能全部为零。

  • 帐号字段不能为空或为空。

现在,让我们在 Maven 项目中编写满足所有这三个条件的业务逻辑。

算法

  • 步骤 1 - 首先创建一个文件夹 BankingAccountNoServices,其中包含名为 BankingAccountNoServices.java 的 Java 文件,用于编写业务逻辑,第二个 TestBankingAccountNoServices.java 用于测试业务逻辑。

  • 步骤 2 - 创建另一个文件 pom.xml,它是一个 xml 文件,包含 Maven 项目的项目和配置详细信息。

  • 第 3 步 - 取得积极成果的关键因素是在 pom.xml 文件中记录相关项目和配置信息。

  • 第 4 步 - 通过满足验证帐号所需的所有必要条件来编写业务逻辑。

  • 步骤 5 - 在 Test BankingAccountNoServices.java 文件中使用 Junit 编写单元测试用例。

在继续操作之前应检查 pom.xml 文件的内容。它在讨论的所有方法中保持一致,并包含 Maven 项目的重要配置详细信息。

示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                              http://maven.apache.org/xsd/maven-4.0.0.xsd">
  
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.example.BankingAccountNoServices </groupId>
   <artifactId>BankingAccountNoServices </artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
  
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
      <junit.version>5.3.1</junit.version>
      <pitest.version>1.4.3</pitest.version>
   </properties>
  
   <dependencies>
      <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-engine</artifactId>
         <version>${junit.version}</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
   <build>
      <finalName>maven-mutation-testing</finalName>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M1</version>
         </plugin>
  
         <plugin>
            <groupId>org.pitest</groupId>
            <artifactId>pitest-maven</artifactId>
            <version>${pitest.version}</version>
  
            <executions>
               <execution>
                  <id>pit-report</id>
                  <phase>test</phase>
                  <goals>
                     <goal>mutationCoverage</goal>
                  </goals>
               </execution>
            </executions>
  
            <dependencies>
               <dependency>
                  <groupId>org.pitest</groupId>
                  <artifactId>pitest-junit5-plugin</artifactId>
                  <version>0.8</version>
               </dependency>
            </dependencies>
            <configuration>
               <targetClasses>
                  <param>com.example.BankingAccountNoServices.* BankingAccountNoServices *</param>
               </targetClasses>
               <targetTests>
                  <param>com.example.BankingAccountNoServices.*</param>
               </targetTests>
            </configuration>
         </plugin>
  
      </plugins>
   </build>
  
</project>

上面的pom.xml代码包含我们的maven项目所需的所有项目和配置详细信息。

方法

  • 方法 1 - 在这种方法中,我们将看到使用 Long.parseLong 的业务逻辑。

  • 方法 2 - 在这种方法中,我们将使用 Character.isDigit() 函数编写业务逻辑。

  • 方法 3 - 在这种方法中,我们将使用 Java 中的正则表达式编写业务逻辑。

方法一:使用Long.parseLong

由于帐号应该是14位数字,因此我们使用Long.parseLong函数将其转换为long类型,然后检查三个必要条件。

示例

import java.util.*;  
public class BankingAccountNoServices {
   public boolean isValid1(String accNo) {
      if (accNo == null || accNo.equalsIgnoreCase("")) {
         return false; 
      }
      try {
         Long.parseLong(accNo); 
         if (accNo.length() == 14) {
            int c = 0;
            int n = accNo.length();
            for (int i = 0; i < n; i++) {
               if (accNo.charAt(i) == '0') {
                  c += 1;
               }
            }
            if (c == 14) { 
               return false;
            } else {
               return true;
            }
         } else {
            return false;
         }
      }
      catch (NumberFormatException exception) {
         return false;
      }
   }
}

在上面的代码中,我们首先检查帐号是否为 null 或空,其次检查帐号的长度是否为 14,然后计算其中零的数量。如果 14 位数字全部为零则返回 false,否则返回 true。

现在,让我们看看使用 JUnit 的单元测试用例。

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; 
public class TestBankingAccountNoServices {
   public void testForBankAccountNo() {
      BankingAccountNoServices ob = new BankingAccountNoServices();
      assertEquals(false, ob.isValid1(null));
      assertEquals(false, ob.isValid1("8378939"));
      assertEquals(true, ob.isValid1("67874864837684"));
      assertEquals(true, ob.isValid1("23451234543214"));
   }
}

在上面的代码中,我们检查了 4 个不同的单元测试用例来验证帐号。

方法2:使用Character.isDigit()

在这种方法中,我们将使用Character.isDigit()函数检查帐号。我们将检查所有三个必要条件来验证帐号。

示例

import java.util.*;  
public class BankingAccountNoServices {
   public boolean isValid2(String accNo){
      if (accNo == null || accNo.equalsIgnoreCase("")) {
         return false; 
      }
      if (accNo.length() == 14) {
         int c = 0;
         for (int i = 0; i < accNo.length(); i++) {
            if (!Character.isDigit(accNo.charAt(i))) {
               return false;
            }
            if (accNo.charAt(i) == '0') {
               c += 1;
            }
         }
         if (c == 14) {
            return false;
         } else {
            return true;
         }
      } else {
         return false;
      }
   }
}

在上面的代码中,我们首先检查帐号是否为 null 或空,其次检查帐号的长度是否为 14,然后检查 accNo 变量的字符是否为数字或不是。第三,检查数字中是否存在零。

现在,让我们看看使用 JUnit 的单元测试用例。

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; 
public class TestBankingAccountNoServices {
   public void testForBankAccountNo() {
      BankingAccountNoServices ob = new BankingAccountNoServices();
      assertEquals(false, ob.isValid2(""));
      assertEquals(false, ob.isValid2("00000000000000"));
      assertEquals(true, ob.isValid2("67874864837684"));
      assertEquals(true, ob.isValid2("34324353488345"));
   }
}

在上面的代码中,我们检查了 4 个不同的单元测试用例来验证帐号。

方法 3:使用正则表达式模式

在这种方法中,我们为数字定义正则表达式模式,并检查帐号验证的所有三个必要条件。

示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;
  
public class BankingAccountNoServices {
   public boolean isValid3(String accNo) {
      if (accNo == null || accNo.equalsIgnoreCase("")) {
         return false; 
      }
      if (accNo.length() == 14) {
         int c = 0;
         String r = "[0-9]+"; 
         Pattern p = Pattern.compile(r);
         Matcher matcher = p.matcher(accNo);
         if (matcher.matches()) { 
            for (int i = 0; i < accNo.length(); i++) {
               if (accNo.charAt(i) == '0') {
                  c += 1;
               }
            }
            if (c == 14) { 
               return false;
            } else {
               return true;
            }
         } else {
            return false;
         }
      } else {
         return false;
      }
   }
}

在上面的代码中,我们首先检查帐号是否为 null 或空,其次检查帐号的长度是否为 14,然后定义一个数字的正则表达式并检查这三个值使用 Pattern 和 Matcher 类的必要条件。

现在,让我们看看使用 JUnit 的单元测试用例。

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; 
public class TestBankingAccountNoServices {
   public void testForBankAccountNo() {
      BankingAccountNoServices ob = new BankingAccountNoServices();
      assertEquals(false, ob.isValid3("47283"));
      assertEquals(false, ob.isValid3("19037293284s32"));
      assertEquals(true, ob.isValid3("67874864837684"));
      assertEquals(true, ob.isValid3("34521678954632"));
   }
}

在上面的代码中,我们检查了 4 个不同的单元测试用例来验证帐号。

结论

在本文中,我们使用 Junit 创建了一个 Maven 项目,专门用于检查银行帐号。我们讨论了三种不同的方法来编写验证银行帐号的业务逻辑,即使用 Long.parseLong、Character.isDigit() 和使用正则表达式模式。它们中的任何一个都可用于执行 Java 中银行帐号的验证。

以上就是使用Junit的Maven项目 - 检查银行账号的详细内容,更多请关注编程之家其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读1k次。背景  我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复..._非瞬态的属性有哪些
文章浏览阅读3.7k次,点赞2次,收藏7次。构造TreeMap可以指定Comparator,但是不能对value字段进行排序。如果有需求对Value字段排序,例如map存放的是单词,单词出现次数,怎么按单词次数排序呢?可以先将map中的key-value放入list,然后用Collections.sort对list排序,再将排序后的list放入LinkedHashMap,最后返回LinkedHashMap就可以了。LinkedH..._map 按某个属性值排序
文章浏览阅读681次,点赞2次,收藏3次。转自:java发送http的get、post请求Http请求类package wzh.Http;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;imp..._java 报域名未知 但本地 发post 请求成功
文章浏览阅读1.4w次。SpringBoot 项目不加载 application.properties 配置文件产生原因:先是创建的SpringBoot2.几版本的项目,结果发现继续使用1.几版本的配置会有很多的问题,于是在pom.xml中把版本改回了1.5.9,然后发现项目启动时并不会加载 application.properties 配置文件。在下图中可以发现,SpringBoot2.几版本的 resou..._spring 未打包application.properties
文章浏览阅读5k次,点赞2次,收藏2次。命令jar tvf FAMS-0.0.1-SNAPSHOT.war | grep prop说明jar tvf 文件名 | grep 要搜索的内容 jar 命令参数说明用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...选项: -c 创建新档案..._虚拟机如何快速查找之前用过的jar包
文章浏览阅读4.5w次,点赞11次,收藏4次。springboot日志配置 logging.path logging.file 注意事项可能有些小伙伴会同时配置 logging.path 和 logging.file,但是又发现其中一个不生效。官方文档中有这么一句:If you want to write log files in addition to the console output youneed to set a..._deprecated configuration property 'logging.path
文章浏览阅读2.9k次。最近用到了json字符串转实体类,转集合的功能,主要代码如下: /** * json 字符串转集合 * * @author lipw * @date 2017年5月10日下午6:08:17 * @param jsonString * @param pojoCalss * 集合中的类 * @return */ public st..._net.sf.json:jsonarray.tocollection日期格式错误
文章浏览阅读2.8k次。最近在做的项目中有一个消息功能,其中像系统消息的实现,就是在消息表中只有一条记录,然后对应每个用户要标记为删除或者已读,就在另一个表中用一条记录的标记。这样设置删除或已读标记的时候,是在另一个表的 Mapper.xml 中操作的,也就不会更新消息表的缓存。有人试图在ABMapper.xml 中采用cache-ref才解决这个问题,不好使。不知道是不是我配得不对。 ABMapper.xm..._多表查询缓存怎么更新
文章浏览阅读3.8w次,点赞4次,收藏14次。一个 Java 项目,除了需要引用 JDK 外,通常都是需要引用第三方 jar 包的,那怎么添加呢?我的作法是这样的:1、将需要引用的 jar 包添加到项目的 resources 目录下,比较多也可以在 resources 下再创建一个目录来保存,这样和配置文件区分开。为什么这么做?主要是考虑把它们也放到版本库中去,做为普通的项目,别人就不能再去找 jar 包了。其实 mave..._将第三方jar包直接放在resources目录下
文章浏览阅读3.2k次。另见:json 转日期出错,JSONArray.toCollection 时间总是转化为当前时间net.sf.json 这个包还真是存在不少问题。上代码:package net.sf.ezmorph.object;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util..._datemorpherex
文章浏览阅读1.6k次。遇到这个问题,有几种可能:1、项目打包的时候 mapping.xml 没有打包进去 2、项目打包的时候,配置文件没有打包进去检查:看看项目的“WEB-INF/classes”目录下,有没有配置文件。完整目录示例:E:Deployapache-tomcatwebappsROOTWEB-INFclasses 3、启用事务处理,但没有做AOP相关配置参考:..._springboot开启定时任务 报这个错org.springframework.beans.factory.beannotofre
文章浏览阅读4.4w次,点赞2次,收藏3次。完整的异常信息:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 't..._el1008e
文章浏览阅读1.2k次。Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。1、按键排序jdk内置的java.util包下的TreeMap&lt;K,V&gt;既可满足此类需求,向其构造方法 TreeMap(Comparator&lt;? super K&gt; comparator) 传入我们自定义的比较器即可实现按键..._java map 按照key排序
文章浏览阅读2.8w次,点赞8次,收藏16次。常用的声明方式(使用静态代码块): public final static Map map = new HashMap(); static { map.put("key1", "value1"); map.put("key2", "value2"); } @SuppressWarnings("serial") private static Map<String, S..._java statis map
文章浏览阅读3.7w次,点赞8次,收藏8次。Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.问题描述Spring Boot 项目,启用事务支持时出现以下..._consider injecting the bean as one of its interfaces or forcing the use of c
文章浏览阅读1.2w次,点赞5次,收藏25次。转自: 注解@CrossOrigin解决跨域问题阅读目录:一、跨域(CORS)支持: 二、使用方法: 1、controller配置CORS 2、全局CORS配置 3、XML命名空间 4、How does it work? 5、基于过滤器的CORS支持 三、spring注解@CrossOrigin不起作用的原因 四、参考文章: 阅读正文:注解@Cro..._@corssorigin
文章浏览阅读6.3w次,点赞8次,收藏48次。application.properties 文件和 application.yml 文件有什么区别呢?yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的。官方给的很多demo,都是用yml文件配置的。注意点:1,原有的key,例如spring.jpa.properties.hibernate.dialect,按“.”分割,都变成树状的配置2,key后面的冒号,后_applicaiton.yml
文章浏览阅读2w次,点赞2次,收藏10次。这个问题要从“ java.io.IOException: Server returned HTTP response code: 403 for URL: http://start.spring.io”错误说起,eclipse 创建 spring boot 项目 遇到错误:java.io.IOException: Server returned HTTP response code: 403 fo_cannot determine embedded database driver class for database type none
文章浏览阅读2.3w次,点赞7次,收藏23次。application.yml application.properties prioritystackoverflow 上有个问题是:Can application.properties and application.yml be mixed? Spring Boot 虽然做了大量的工作来简化配置,但其配置依然是相当的复杂!支持的外部配置方式就高达 17 种之多,当然这很灵活,..._apollo和application.yml的优先级
文章浏览阅读8.3k次。p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}项目启动后,控制台输出中有以下内容:[org.mybatis.spring.mapper.ClassPathMapperScanner]-No MyBatis mapper was found in '[com.xxx.xxx.dao]' package. Please check_org.mybatis.spring.mapper.classpathmapperscanner - no mybatis mapper was fou