2013年4月9日星期二

用SWTBot 在 E 測試 content assist

SWTbot 是一個 Eclipse plugin 可用來自動測試 Eclipse plugin。

Javadoc

幾點注意

  • test case運作時必須加上 plug-ins:
    org.eclipse.core.net
    org.eclipse.ui.ide.application
  • 執行時可能需要加上JVM參數 -XX:MaxPermSize=512m ,在我的環境下總是會遇到 outofmemoryerror: PermGen Space
  • 模擬按鍵 :http://wiki.eclipse.org/SWTBot/Keyboard_Layouts



以下是簡單的測試案例,其步驟是移動游標到指定位置,並觸發content assist功能,並檢查proposal內容是否如我們預期。

import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEclipseEditor;
import org.eclipse.swtbot.eclipse.gef.finder.SWTBotGefTestCase;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.utils.Position;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;



@RunWith(SWTBotJunit4ClassRunner.class)
public class Basic extends SWTBotGefTestCase {

 private static SWTWorkbenchBot benchBot;

 @BeforeClass
 public static void beforeClass() throws Exception {

  SWTBotPreferences.TIMEOUT = 10000;
  benchBot = new SWTWorkbenchBot();

  benchBot.viewByTitle("Welcome").close();

 }



 @Test
 public void test() {

  // Generated code goes there
  benchBot.menu("Package Explorer").click();
  benchBot.tree().getTreeItem("WtpTest").expand();
  benchBot.tree().getTreeItem("WtpTest").getNode("WebContent").expand();
  benchBot.tree().getTreeItem("WtpTest").getNode("WebContent").expand();

  SWTBotTreeItem myFolder = 
    benchBot.tree().getTreeItem("WtpTest").getNode("WebContent").getNode("myfolder");

  myFolder .expand();
  myFolder .getNode("basic.jsp").doubleClick();


  SWTBotEclipseEditor editor  = benchBot.editorByTitle("basic.jsp").toTextEditor();

  editor.setFocus();
  editor.navigateTo(5, 12);

  List proposals = editor.getAutoCompleteProposals("");

  //assert proposals

 }

}

2013年3月22日星期五

軟體版本編號方式


 Apache Portable Runtime Project Version Numbering 這分文件詳細定義編號意義,讓編號代表明確的軟體工程意義。

基本上就是3個數字組成: MAJOR.MINOR.PATCH

每一個數字改變都有相容性上不同的意義。

2013年3月21日星期四

Application Framework 設計感想

關於一個application framework 該怎麼設計,根據這陣子工作的經驗,整理一些心得。


  1. 使用時鬆散,設計時嚴謹。
    鬆散是方便使用者,算是一種抽象化,使其不需要瞭解運作細節就可以使用。設計嚴謹才容易在其上發展更多應用,如輔助工具等。
    可以讓你鬆散使用的技術,背後在執行的時候都有嚴謹的定義,當運作不如你預期的時候,可以依循一個嚴謹的規則檢視背後的運作流程來除錯。
  2. 從簡單的原則與概念開始,漸進地增加概念。
    每次增加一個概念,都要與既有概念一起比較分析,看有無衝突之處。
    Spring framework 最早只從一個 Dependency Injection概念開始,發展到今天成為一個 de facto Java EE standard。
    我相信儘可能的維持簡單才是好得設計,因為人的心智是極為有限的。
  3. 整體應維持一致的設計哲學。
    兩種相反的程式語言設計哲學:
    Python: There should be one-- and preferably only one --obvious way to do it
    Perl: There's more than one way to do it.
    沒有對錯,只有維持一致才不會讓使用者混亂。
    有一致的規則,使用者容易理解,可以舉一反三,不用事事皆需查文件,也無需針對各種情況寫文件。
  4. 從使用角度來評估需求,並用嚴謹的技術去滿足。
    從使用者角度評估才能解決他們真正的痛點,但用嚴謹的技術才能維持長久發展。
  5. 新創的抽象概念應有明確的定義。

2013年3月6日星期三

TortoiseGit (Git 客戶端)


TortoiseGit是Windows下可用的Git 客戶端,可用來與Github連線,push及pull程式碼

簡單裝安裝教學:

[教學]初心者git (TortoiseGit) + GitHub使用教學


使用的時候記得啟動Pageant (Putty agent)並把產生的private key加到Pageant中,才可進行ssh通訊。

2012年7月12日星期四

大衛 鮑森新約、舊約綜覽


大衛 鮑森(David Pawson) 的新約、舊約綜覽是非常好的讀經教材,他深入淺出的講解聖經,保證讓基督徒在聖經中找到前所未有的亮光。

以下是一些相關的網路資源:

Mp3
福音影視網
新約綜覽
舊約綜覽

正版DVD有附上課程內的所有中文圖表與講義,值得收藏。

2012年7月11日星期三

為新手撰寫技術文章的方法

觀察 "XYZ" for Dummies這類書籍中使用的撰寫方式:

  • 每章開頭有漫畫
  • 將要描述的觀念、步驟,條列式、分點
  • 配合圖示來標注要強調的段落
  • 採用較大的標題,標題用特別的字型
  • 儘量使用圖片說明想法
  • 另闢一區特別解釋專有名詞

其他作法:
  • 從讀者的角度去訂標題
  • 只提供一種不容易出錯的操作步驟
  • 去除非必要的程式碼與技術細節