Drinking Mockito with A Simple Stock Broker Simulation Program

第三方库

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

java 复制代码
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

java 复制代码
package com.yaya.junit;

import com.yaya.mockito.Stock;

public interface MarketWatcher {
    public Stock getQuote(String symbol);
}

Portfolio

java 复制代码
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

java 复制代码
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

java 复制代码
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;

    @Before
    public void setUp(){
        stockBroker = new StockBroker(marketWatcher);
    }

    @Test
    public 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);
    }


}

运行结果

相关推荐
扬帆丶起航15 天前
python单元测试
python·单元测试·mock
G皮T17 天前
【单元测试】Spring Boot 的测试库
spring boot·单元测试·unit testing·unit test
code-jam1 个月前
springboot项目,@Test写法 @Before @After
spring boot·单元测试·unit testing
墩墩分墩2 个月前
【SpringBoot】解锁后端测试新境界:学习Mockito与MockMvc的单元测试魔法
spring boot·单元测试·集成测试·mock·moockito
深色風信子2 个月前
SpringBoot Mockito 依赖注入
mock·mockito·springboot单元测试·springboot mock
天空~华2 个月前
【JAVA】单元测试的简单应用
java·junit·单元测试·测试覆盖率·mockito
Hong12 个月前
如何在 Postman 中利用 Mock server 模拟请求响应?
前端·postman·mockito
With Order @!1473 个月前
Mockito
单元测试·log4j·mockito
摇光933 个月前
React + 项目(从基础到实战) -- 第八期
前端·react.js·mock·axios
endswel3 个月前
Spring Boot Mockito (三)
spring boot·后端·mockito