如何在 TestNG 中匿名 class return 时测试私有方法

How to test a private method when anonymous class return in TestNG

我需要使用 TestNG 测试 StockPrice class 中的 getPrice() 方法。并覆盖 priceCalculator() 方法

内的行
public class StockPrice {

  public double getPrice(){
    Stock stock = getStock();
    return finalPrice(stock,1000,true);
  }

  private double finalPrice(Stock stock, int price, boolean isDiscountAvailable){
    return stock.priceCalculator(price,isDiscountAvailable)-100;
  }

  private Stock getStock(){
    return new Stock()
    {
      @Override
      public double priceCalculator(int price, boolean isDiscountAvailable)
      {
        if (isDiscountAvailable){
          return price-price/10;
        }else {
          return price;
        }
      }
    };
  }
}

interface Stock{
  double priceCalculator(int price, boolean isDiscountAvailable);
}

我尝试用几种方法覆盖 1 priceCalculator() 方法中的行,但由于以下原因没有成功

你能给我一个解决方案来覆盖 priceCalculator 方法中的行吗?

综上所述,我需要覆盖以下代码。

@Override
public double priceCalculator(int price, boolean isDiscountAvailable)
{
  if (isDiscountAvailable){
    return price-price/10;
  }else {
    return price;
  }
}

通过public方法测试。

Stock class 不访问任何外部和慢速资源,所以你不需要模拟任何东西。

@Test
public void getPrice_returns_expected_price() {
    StockPrice stockPrice = new StockPrice();

    double actual = stockPrice.getPrice();

    assertEquals(800, actual);
}