Drinking Mockito with A Simple Stock Broker Simulation Program

news/2024/12/23 5:11:38/

第三方库

junit-4.13.2

mockito-core-3.12.4

hamcrest-all-1.3

objenesis-1.2

byte-buddy-1.12.10

byte-buddy-agent-1.12.10

项目目录结构

src每个类的代码

Stock

package com.yaya.mockito;import java.math.BigDecimal;public class Stock {private String symbol;private String name;private BigDecimal price;public Stock(String symbol, String name, BigDecimal price){this.symbol = symbol;this.name = name;this.price = price;}public String getSymbol(){return symbol;}public BigDecimal getPrice(){return price;}
}

MarketWatcher

package com.yaya.junit;import com.yaya.mockito.Stock;public interface MarketWatcher {public Stock getQuote(String symbol);
}

Portfolio

package com.yaya.junit;import com.yaya.mockito.Stock;import java.math.BigDecimal;
import java.util.Map;public class Portfolio {private Map<String,String> stockMap;public void buy(Stock stock){}public BigDecimal getAvgPrice(Stock stock){return new BigDecimal("10.0");}public void sell(Stock stock,int shares){}}

StockBroker

package com.yaya.junit;import com.yaya.mockito.Stock;import java.math.BigDecimal;public class StockBroker {private final static BigDecimal LIMIT = new BigDecimal("0.10");private final MarketWatcher market;public StockBroker(MarketWatcher market) {this.market = market;}public void perform(Portfolio portfolio, Stock stock){Stock liveStock = market.getQuote(stock.getSymbol());BigDecimal avgPrice = portfolio.getAvgPrice(stock);BigDecimal priceGained = liveStock.getPrice().subtract(avgPrice);BigDecimal percentGained = priceGained.divide(avgPrice);if(percentGained.compareTo(LIMIT)>0){portfolio.sell(stock,10);}else if(percentGained.compareTo(LIMIT)<0){portfolio.buy(stock);}}
}

test类代码

StockBrokerTest

package com.yaya.junit;import com.yaya.mockito.Stock;
import org.junit.Before;
import org.junit.Test;import java.math.BigDecimal;import static org.junit.Assert.assertNotNull;import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;public class StockBrokerTest {MarketWatcher marketWatcher = mock(MarketWatcher.class);Portfolio portfolio = mock(Portfolio.class);StockBroker stockBroker;@Beforepublic void setUp(){stockBroker = new StockBroker(marketWatcher);}@Testpublic void when_ten_percent_gain_then_the_stock_is_sold(){when(portfolio.getAvgPrice(isA(Stock.class))).thenReturn(new BigDecimal("10.00"));Stock myCorp = new Stock("YaYa","YaYa Corporation",new BigDecimal("11.20"));when(marketWatcher.getQuote(anyString())).thenReturn(myCorp);stockBroker.perform(portfolio,myCorp);verify(portfolio).sell(myCorp,10);}}

运行结果


http://www.ppmy.cn/news/1162823.html

相关文章

无人机遥控中应用的2.4GHz无线芯片

无人驾驶飞机简称“无人机”&#xff0c;英文缩写为“UAV”&#xff0c;是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机&#xff0c;或者由车载计算机完全地或间歇地自主地操作。是一种不需要人操控就能够自主飞行的飞行器&#xff0c;它可以执行多种任务&#xff…

Linux高性能服务器编程——ch3笔记

第3章 TCP 协议详解 3.1 TCP服务的特点 面向连接&#xff1a;在数据读写前必须先建立连接&#xff0c;并分配内核资源。全双工&#xff08;读写可以通过一个连接进行&#xff09;。数据交换后必须断开连接&#xff0c;释放系统资源。 一对一的&#xff0c;基于广播和多播&…

【Linux】在Ubuntu下安装Zotero

【Linux】在Ubuntu下安装Zotero 文章目录 【Linux】在Ubuntu下安装Zotero1. Debian InstallationReference 1. Debian Installation 直接使用下面三条语句进行安装即可 wget -qO- https://raw.githubusercontent.com/retorquere/zotero-deb/master/install.sh | sudo bash su…

视频文件打不开?盘点4个有效方法!

“好奇怪呀&#xff0c;我将相机里的部分视频导入电脑了&#xff0c;但是这些视频都无法打开。视频文件打不开是为什么呢&#xff1f;应该怎么做才能正常播放视频呀&#xff1f;” 随着数字化媒体的普及&#xff0c;视频文件在我们的生活中扮演着越来越重要的角色。然而&#x…

DC电源模块的开发周期

BOSHIDA DC电源模块的开发周期 DC电源模块是一种被广泛应用于电力系统中的设备&#xff0c;它能够将交流电转换成为直流电&#xff0c;为电子设备提供可靠、稳定的电源。DC电源模块的开发周期涉及到多个方面&#xff0c;包括设计、测试、验证、批量生产等环节。本文将从这几个方…

vue中动态设置source标签

项目中有个视频播放,路径通过接口返回,而且不带后缀,并不确定是什么类型的视频文件,所以要通过source标签去进行设置. 问题:当video中存在source标签的时候&#xff0c;浏览器渲染之后会自动去获取地址&#xff0c;即便地址改变&#xff0c;浏览器也不会再去获取地址。 解决方…

Qtday01(qt简介、简单窗口组件)

今日任务 仿qq登录界面&#xff0c;QT实现 代码&#xff1a; 头文件&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QLineEdit> #include <QLabel> #include <QPushButton> #include <QtDebug> #…

读《中国省级移动政务服务报告2023》

报告地址&#xff1a; 中国省级移动政务服务报告2022 https://www.digitalelite.cn/h-nd-7846.html 中国省级移动政务服务报告2023 中国省级移动政务服务报告2023 报告分为 引言、评估方法、概貌、指数、标杆、建言 六个部分。 一些思考 移动政务服务应用针对各省的常驻人口…