【问题标题】:How to test a private method when anonymous class return in TestNG当匿名类在TestNG中返回时如何测试私有方法
【发布时间】:2020-10-09 19:48:32
【问题描述】:

我需要使用 TestNG 测试 StockPrice 类中的 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() 方法中的行,但由于以下原因没有成功

  • getStock() 方法是私有方法,因此无法访问它。我尝试使用反射来访问它,但得到了java.lang.NoSuchMethodException:
  • getStock() 返回匿名对象。然后不能覆盖行 priceCalculator() 方法

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

总之,我需要覆盖以下代码。

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

【问题讨论】:

    标签: java unit-testing testng


    【解决方案1】:

    通过公共方法测试。

    Stock 类不访问任何外部和慢速资源,因此您无需模拟任何内容。

    @Test
    public void getPrice_returns_expected_price() {
        StockPrice stockPrice = new StockPrice();
    
        double actual = stockPrice.getPrice();
    
        assertEquals(800, actual);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 2010-09-08
      • 1970-01-01
      • 2019-09-05
      • 2016-06-01
      • 2018-04-09
      • 1970-01-01
      相关资源
      最近更新 更多