2012-01-24 97 views
1

我有問題測試我重寫的繪畫組件。junit測試重寫繪畫組件

我已刪除了大量的代碼來簡化東西

@Override 
    protected void paintComponent(Graphics g) { 
       g.setColor(Color.RED); 
       int y = //some come; 
       int height = //some code 
       //for loop 
       g.clearRect(1, y, getWidth(), height); 
       g.drawRect(1, y, getWidth(), height); 
      } 
     } 
     super.paintComponent(g); 
    } 

我的塗料成份所創建多個矩形。我需要詳細瞭解繪製的矩形數量和高度。我不知道如何做一個單元測試來做到這一點。

我試過使用TextAreas'getComponents()方法,但它返回null。我認爲調用repaint()會觸發paint組件執行。

感謝所有幫助

回答

2

有2個解決方案,我能想到的:

打電話給你的組件的paint方法與GraphicsBufferedImage。所以,

BufferedImage bi = new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2 = bi.createGraphics(); 
yourComponent.setSize(width,height); 
yourComponent.paint(g2); 
g2.dispose(); 

分析bi的內容。

選項2,你可以讓你的組件暴露它的內容。當你的矩形被繪製時,記錄你所做的調用。然後使該對象可用。如果您需要特定的尺寸,這可能會更有用。

private StringBuilder sb = new StringBuilder(); 
public String getOperations() { 
    return sb.toString(); 
} 
@Override 
protected void paintComponent(Graphics g) { 
    sb.setSize(0); 
    g.setColor(Color.RED); 
    sb.append("Color(red),"); 
    int y = //some come; 
    int height = //some code 
    //for loop 
    g.clearRect(1, y, getWidth(), height); 
    sb.append("Clear(").append(getWidth()),append(",") 
     .append(height).append("),"); 
    g.drawRect(1, y, getWidth(), height); 
    sb.append("drawRect(").append(1),append(","),append(y).append(",") 
     .append(getWidth()),append(","),append(height).append("),"); 
    g.dispose(); 
    super.paintComponent(g); 
} 
+0

上面的一個很好。感謝那。我試圖在yourComponent.paintComponent(g2)之後調用getComponents()方法; 它說沒有組件,即使我做g.drawRect(1,y,getWidth(),height); – Decrypter

+0

'getComponents()'方法返回* child *組件。所以,如果你有一個'JPanel p'並且用'p.add(l)'添加'JLabel l',那麼'p.getComponents()'將返回'l'。但是,重寫'paintComponent'不會添加任何子組件。 –

0

它說有,即使我做g.drawRect(1,Y的getWidth(),高度)沒有成分;

您不添加組件到面板,因此沒有組件可以獲得。 drawRect(...)方法僅繪製矩形的輪廓,但不創建組件。

如果要跟蹤繪製的「矩形形狀」,請使用ArrayList存儲有關形狀的信息。有關使用ArrayList的示例,請參閱Custom Painting ApproachesDrawOnComponent示例。