英文:
How to test a private method when anonymous class return in TestNG
问题
以下是您要求的翻译内容:
我需要使用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;
}
}
英文:
I need to test getPrice() method in StockPrice class by using TestNG. and cover the lines inside the priceCalculator()
method
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);
}
I tried to cover the lines inside the 1 priceCalculator()
method in several ways but did not succeed due to the following reasons
- getStock() method is a private method so cannot access it. I tried with using reflections to access it but got
java.lang.NoSuchMethodException:
- getStock() returns and Annonymous object. Then cannot cover the lines priceCalculator() method
can you give me a solution to cover the lines in the priceCalculator
method.
in summary, I need to cover the following code.
@Override
public double priceCalculator(int price, boolean isDiscountAvailable)
{
if (isDiscountAvailable){
return price-price/10;
}else {
return price;
}
}
答案1
得分: 1
通过公共方法进行测试。
Stock
类不访问任何外部且较慢的资源,因此您不需要模拟任何内容。
@Test
public void getPrice_returns_expected_price() {
StockPrice stockPrice = new StockPrice();
double actual = stockPrice.getPrice();
assertEquals(800, actual);
}
英文:
Test it through public method.
Stock
class doesn't access any external and slow resources, so you need to mock nothing.
@Test
public void getPrice_returns_expected_price() {
StockPrice stockPrice = new StockPrice();
double actual = stockPrice.getPrice();
assertEquals(800, actual);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论