如何在 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()
方法中的行,但由于以下原因没有成功
- getStock() 方法是私有方法,因此无法访问它。我尝试使用反射来访问它,但得到了
java.lang.NoSuchMethodException:
- getStock() returns 和匿名对象。然后不能覆盖行 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);
}
我需要使用 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()
方法中的行,但由于以下原因没有成功
- getStock() 方法是私有方法,因此无法访问它。我尝试使用反射来访问它,但得到了
java.lang.NoSuchMethodException:
- getStock() returns 和匿名对象。然后不能覆盖行 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);
}