使用FizzBu​​zz和JUnitParams进行单元测试

我有时使用FizzBu​​zz向新手演示单元测试的基础。 尽管FizzBu​​zz确实是一个简单的问题,但它也可以用于演示更高级的单元测试技术,例如实现参数化测试。

FizzBu​​zz的可能解决方案之一是:

public class FizzBuzz {private static final int THREE = 3;private static final int FIVE = 5;public String calculate(int number) {if (isDivisibleBy(number, THREE) && isDivisibleBy(number, FIVE)) {return "FizzBuzz";}if (isDivisibleBy(number, THREE)) {return "Fizz";}if (isDivisibleBy(number, FIVE)) {return "Buzz";}return String.valueOf(number);}private boolean isDivisibleBy(int dividend, int divisor) {return dividend % divisor == 0;}
}

上面的示例非常适合显示JUnitParams的参数化测试。 我们可以创建4种测试方法,每种方法用于不同的FizzBu​​zz案例:

@Test
@Parameters({"1", "2", "4", "7", "11", "13", "14"})
public void returnsNumberForNumberNotDivisibleByThreeAndFive(int number) {assertThat(fizzBuzz.calculate(number)).isEqualTo("" + number);
}@Test
@Parameters({"3", "6", "9", "12", "18", "21", "24"})
public void returnFizzForNumberDivisibleByThree(int number) {assertThat(fizzBuzz.calculate(number)).isEqualTo("Fizz");
}@Test
@Parameters({"5", "10", "20", "25", "35", "40", "50"})
public void returnBuzzForNumberDivisibleByFive(int number) {assertThat(fizzBuzz.calculate(number)).isEqualTo("Buzz");
}@Test
@Parameters({"15", "30", "45", "60"})
public void returnsFizzBuzzForNumberDivisibleByThreeAndFive(int number) {assertThat(fizzBuzz.calculate(number)).isEqualTo("FizzBuzz");
}

但是我们也可以用一种参数化的测试方法涵盖所有​​情况:

@Test
@Parameters
public void fizzBuzz(int given, String expected) {assertThat(fizzBuzz.calculate(given)).isEqualTo(expected);
}public Object[] parametersForFizzBuzz() {return $($(1, "1"),$(2, "2"),$(3, "Fizz"),$(4, "4"),$(5, "Buzz"),$(6, "Fizz"),$(7, "7"),$(10, "Buzz"),$(15, "FizzBuzz"),$(30, "FizzBuzz"));
}

享受JunitParams !

  • 看一下介绍单元测试不同方面的unit-testing-demo项目,包括参数化测试: https : //github.com/kolorobot/unit-testing-demo

翻译自: https://www.javacodegeeks.com/2014/11/unit-testing-exercise-with-fizzbuzz-and-junitparams.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elements in iteration expect to have v-bind:key directives错误的解决办法

一、错误如下[eslint-plugin-vue][vue/require-v-for-key]Elements in iteration expect to have v-bind:key directives.Renders the element or template block multiple times based on the source data. 使用VS Code 出现如下问题,如图 二、解决 在用vscode编写…

统计年鉴 付费下载 夏泽网

夏泽网链接 转载于:https://www.cnblogs.com/camelroyu/p/11597533.html

浏览文件按钮

private void btnSelect2_Click(object sender, EventArgs e){string path GetPath();if (!string.IsNullOrEmpty(path)){tbText2.Text path;}}private string GetPath(){OpenFileDialog fileDialog new OpenFileDialog();fileDialog.Title "选择文件";fileDialo…

无法使用JDK 8卸载JavaFX SceneBuilder 1.0

我最近从旧的基于Vista的笔记本电脑中删除了一些我曾经使用过的软件开发应用程序,工具和文件,因为主要使用该笔记本电脑的人们现在对软件开发不再感兴趣。 作为该工作的一部分,我尝试删除了几年前在该笔记本电脑上安装的JavaFX Scene Builder…

分享一个不错的表格样式

先贴个HTML生成的源码出来&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

微信小程序如何检测接收iBeacon信号

前话 微信小程序开发带着许多坑&#xff0c;最近就遇到了个需求&#xff0c;检测iBeacon来进行地点签到。 (╯▔皿▔)╯ 微信小程序对于iBeacon的文档也写的十分精简&#xff0c;只简单介绍了每个接口的作用&#xff0c;这就导致我以为简单调用单个接口即可实现功能&#xf…

centos7.3 docker安装grafana

一、编写docker-cmpose文件 docker-compose.yml文件如下&#xff1a; 1 version: "3.3"2 services:3 grafana:4 image: grafana/grafana:latest5 environment:6 GF_SECURITY_ADMIN_PASSWORD: aibili_grafana7 ports:8 - 3000:30009 us…

如何将SQL GROUP BY和聚合转换为Java 8

我无法抗拒。 我已经阅读了Hugo Prudente在Stack Overflow上提出的问题 。 而且我知道必须有比JDK提供的更好的方法。 问题如下&#xff1a; 我正在寻找一个lambda来优化已检索的数据。 我有一个原始的结果集&#xff0c;如果用户不更改我想要的日期&#xff0c;则使用Java的…

类库,随机数,属性,值类型和引用类型

类库&#xff0c;随机数&#xff0c;属性&#xff0c;值类型和引用类型 1.文档注释与类库的生成 (1)类库的生成 右击添加新建项&#xff0c;建立类库&#xff08;DLL&#xff09;。 (2)导入类库 在项目中建立文件夹DLL&#xff0c;直接把外部DLL和XML文件拖入文件夹&#xff0c…

input获得焦点和失去焦点

总结&#xff1a;placeholder因为在IE7 8 9 浏览器不支持所以没用它效果&#xff1a;当input获取光标的时候如果是默认提示则input内容为空。如果不是则为输入内容 当失去光标的时候&#xff0c;如果input内容为空&#xff0c;则恢复默认提示&#xff0c;如果不是则为…

带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8

DIY墨盒是一种实验性墨盒&#xff0c;它提供了一种在OpenShift上测试不受支持的语言的方法。 它提供了最小限度的自由形式的支架&#xff0c;将墨盒的所有细节留给了应用程序开发人员 。 这篇博客文章说明了结合了PostgreSQL服务的Spring Boot / Java 8 / Tomcat 8应用程序的使…

zabbix监控docker容器

1、环境说明 由于最近zabbix进行过一次迁移&#xff0c;所以zabbix-server系列采用docker方式安装&#xff0c;参考zabbix官网&#xff1a;https://github.com/zabbix/zabbix-docker。为适应本地环境和需求&#xff0c;docker-compose.yml文件有改动&#xff0c;具体内容如下&a…

全角半角转换

#region 全角半角转换 /// <summary> /// 转全角的函数(SBC case) /// </summary> /// <param name"input">任意字符串</param> /// <returns>全角字符串</returns> ///<remarks> ///全角空格为12288&#xff0c;半角空格…

jquery中的left和top

left 和 top /*1. 获取元素基于定位容器的位置*//*返回的是对象 属性 left top */var position $(.inner).position();console.log(position.left);console.log(position.top);/*2. 获取元素基于页面容器的位置 基于页面的偏移*/var offset $(.inner).offset();console.l…

让我们用jOOλ在Java 8中流式传输地图

我想找到一种简单的方法来用Java 8流式传输Map 。猜猜是什么&#xff1f; 没有&#xff01; 为了方便起见&#xff0c;我期望的是以下方法&#xff1a; public interface Map<K, V> {default Stream<Entry<K, V>> stream() {return entrySet().stream();} …

双向链表的快速排序

#include <stdio.h> #include <stdlib.h> #include <time.h> //定义类型 所有的排序例子中都是用的int作为data typedef int elemType; //返回值 #define RET_SUCCESS ( 1 ) #define RET_FAILED ( 0 ) //定义链表的长度 #define LIST_MAX_SIZ…

Hibernate应用程序级可重复读取

介绍 在我以前的文章中&#xff0c;我描述了应用程序级事务如何为长时间的对话提供合适的并发控制机制。 所有实体都在Hibernate会话的上下文中加载&#xff0c;充当事务后写式缓存 。 Hibernate持久性上下文可以包含给定实体的一个引用和一个引用。 一级缓存可确保会话级可重…

HDU-2732 Leapin' Lizards 最大流

题目意思是有一些蜥蜴在一个迷宫里面&#xff0c;求这些蜥蜴还有多少是无论如何都逃不出来的。题目只给定一个行数&#xff0c;一个最远能够跳跃的距离&#xff0c;列数是不确定的&#xff08;题目告知列数小于等于20&#xff09;&#xff0c;但是数据一定会是一个矩阵。每只蜥…

canvas动画简单操作

canvas动画 小球滚动效果 关键api&#xff1a; window.requestAnimationFrame(draw) 会递归调用draw函数&#xff0c;替代setIntervalvar x 20; var speed 4; //电脑的帧率是1秒钟60Hz&#xff0c; 就相当于一秒钟可以播放60张图片&#xff0c;就相当于播放一张图片使用16.…

编译相关

编译的过程 &#xff1a; 1. 词法分析&#xff0c;程序被扫描成&#xff1a;关键字&#xff0c;标识符&#xff0c;字面量和特殊符号这些记号。 2. 语法分析&#xff0c;对记号进行语法分析产生语法树。&#xff08;代码最终由表达式组合&#xff09; 3. 语义分析&#xff0c;经…