Java 使用Mockito/PowerMockito伪造方法参数
我必须对类Java 使用Mockito/PowerMockito伪造方法参数,java,unit-testing,apache-poi,mockito,powermockito,Java,Unit Testing,Apache Poi,Mockito,Powermockito,我必须对类ServiceImpl的HandlerRequest方法进行单元测试,该类使用ExcelWriter的writeDetailsForCategory,该类使用受保护的方法writeToCell。我已通过writeToCell方法中的FakeExcelSheet。在此之后,我将对映射的值进行断言。如何在protectedwriteToCell方法中传入fakeExcelSheet参数?我的限制是我只能使用Mockito或PowerMockito。继续从我的开始,您可以将特定的ExcelW
ServiceImpl
的HandlerRequest
方法进行单元测试,该类使用ExcelWriter的writeDetailsForCategory
,该类使用受保护的方法writeToCell
。我已通过writeToCell
方法中的FakeExcelSheet
。在此之后,我将对映射的值进行断言。如何在protected
writeToCell
方法中传入fakeExcelSheet参数?我的限制是我只能使用Mockito或PowerMockito。继续从我的开始,您可以将特定的ExcelWriter
替换为StringGridWriter
,它写入给定的StringGrid
。它不知道也不在乎它是否优秀
protected void writeCell(int rowNum, int colNum, String value, Sheet sheet)
{
if (value == null)
{
return;
}
Row row = sheet.getRow(rowNum);
if (row == null)
{
row = sheet.createRow(rowNum);
}
Cell cell = row.createCell(colNum);
cell.setCellValue(value);
}
其中ApacheSheetStringGrid
与我的另一个答案相同。所以现在,即使是ServiceImpl
也不知道这是在使用excel。这种依赖关系的注入在实践中是最常见的
看看我是如何快速摆脱复杂的excel界面的,并将其归结为一个抽象,一个功能的子集,这只是我的客户想要的接口(),这使得它既易于测试,又易于用其他实现替换。通过不抽象,您将代码与ApacheExcel实现紧密耦合
public class ServiceImpl
{
........
.
.
private ExcelWriter excelWriter;
private Sheet sheet;
private void handleRequest()
{
while("Till there are more rows")
{
excelWriter.writeDetailsForCategory(List<String> listOfItems)
}
}
}
public class ExcelWriter()
{
protected Sheet sheet;
public void writeDetailsForCategory(List<String> listOfItems)
{
for(String item : listOfItems)
{
writeToCell(rowNum, columnNum, value, sheet);
columnNum++;
}
}
}
protected void writeCell(int rowNum, int colNum, String value, Sheet sheet)
{
if (value == null)
{
return;
}
Row row = sheet.getRow(rowNum);
if (row == null)
{
row = sheet.createRow(rowNum);
}
Cell cell = row.createCell(colNum);
cell.setCellValue(value);
}
public final class StringGridWriter() {
private final StringGrid grid;
public StringGridWriter(StringGrid grid) {
this.grid = grid;
}
public void writeDetailsForCategory(List<String> listOfItems) {
for(String item : listOfItems) {
grid.writeToCell(rowNum, columnNum, value);
columnNum++;
}
}
}
public class ServiceImpl {
........
.
.
private final StringGridWriter gridWriter;
public ServiceImpl(StringGridWriter gridWriter) {
this.gridWriter = gridWriter;
}
private void handleRequest() {
while("Till there are more rows"){
gridWriter.writeDetailsForCategory(List<String> listOfItems)
}
}
}
Sheet theApacheSheet = ...;
StringGrid grid = new ApacheSheetStringGrid(theApacheSheet);
StringGridWriter writer = new StringGridWriter(grid);
ServiceImpl service = new ServiceImpl(writer);