2012年11月14日

用 Mockito 的 injectMocks

官方網站上面沒找到, google 一下看到這篇 http://gladkowski.blogspot.tw/2011/06/mocking-objects-and-injecting.html

常常會遇到待測目標是用 @Resource, 或者其他方法拿到的, 測試的時候一般會想要排除這些依賴項目而嘗試寫假物件來提供更一致的行為; 這邊是要提用 Mockito 時候應該怎麼做.

首先必須 import 以下項目:


import org.mockito.Mock;
import org.mockito.InjectMocks;
import org.mockito.runners.MockitoJUnitRunner;
import org.junit.runner.RunWith;




在你的test class 宣告前面放上

@RunWith(MockitoJUnitRunner.class)


假設欲測的 class 叫做 target, 需要 inject 的 resource 叫做 dependent; 那麼在 class 的 scope, 可以宣告


@Mock
private Dependent dependent;
@InjectMocks
Target target = new Target();


之後你就可以跟原本一樣使用 dependent 來達成測試的需求了, 例如


when(dependent.func(anyString()).thenReturn("Hello");
        assertEquals("Hello", target.getStringFromDependentFunc());




2012年9月14日

Resize(Shrink) image size

大部份 resize VM image的文章都是講怎麼 expand, 讓既有的VM繼續長大; 這次我的需求是要從一個VM刪除掉多餘的資料以作出base image.

2012年7月2日

install SVN in OSX

因為新公司使用subversion 做 revision control, 很自然地找到 eclipse 的 subversion plug-in.  結果狀況還是東缺西缺的.
參考網路搜尋到的文章, 從eclipse -> help -> install new software, 找svn然後裝起來.
看起來版本有問題, 抓到的東西跟 repository上面的差很多....
上了subclipse的官網去撈, 確定版本之後抓下來, 準備要撈source的時候跳了一個 javahl not found的error..... google了一下, 有人說用macport裝 subversion就可了, 於是去找了brew上面的解法, 實驗之後仍然出現了java hl 的問題, 不過 ignore 之後 code好像抓下來了..... 來確認一下....

2010年1月22日

在Perl裏面使用Get Option

新年新氣象...(抖

使用script通常會想要保留一點彈性, 在command line可以做一些設定, 無論是單純的data input或是功能的擴充. 雖然perl讀取command line arguments已經相當簡單, 從@ARGV裏面撈東西就可以了, 但是用了一陣子的Linux之後, 漸漸覺得使用standard option相當直觀而且方便, 如果有現成的Module我們就不必每次都花很多時間在處理input上面了.

參考文章1: 詳細介紹Perl支援的GetOption以及一些歷史
參考文章2: (中文)GetOption的用法

簡單的說, 可以利用 Getopt::Long這個module,
給一個hash variable, 拿到command line的parameter. 另外可以用=s, =f, =i這種宣告來拿到option帶的參數.
更甚者, Getopt::Long提供alias的功能, 對於一個選項可以有多種的命名. 對於console mode的使用也相當的方便. 特別要介紹的是bundling這個選項. 打開之後可以支援複合選項的輸入, 像是-a -b -c 可以簡化成 -abc. 但是這樣一來可能會造成一些誤用, 以致在這個module default是沒有打開的.

2009年1月5日

用Perl讀寫Excel文件(1)

基本上是參考IBM網站上的說明文件
不過這篇有種濃厚的機器翻譯感, 稍微擷取一下需要的部分來談談吧!
Windows下通常我們會使用Win32::OLE裡的方法來處理,

use Win32::OLE::Const 'Microsoft Excel';
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application', 'Quit');

上面為設定參數, 嘗試尋找已存在的Excel, 否則開啟一個新的Excel Instance.

# open Excel file
my $Book = $Excel->Workbooks->Open("c:/komodo projects/test.xls");

開啟一個指定路徑下的Excel檔案, 回傳一個Win32::OLE->Excel->Workbooks的物件; 有了這個handle就可以使用Excel檔案了.

my $Sheet = $Book->Worksheets(1);

指定調用第幾個工作表. 上面指定了第一個. 可以利用worksheet的名字來調用.

$data= $Sheet->Cells($row,$col)->{'Value'};

$data將得到(row,col)的值. 事實上, 相反的也可以這樣修改(row,col)的內容.
調用Formula則是把Value改為Formula即可. ex: $Sheet->Cells($row,$col)->{'Formula'} ;row,col也可以用Range("[alphabet][number]")的方式直接取值.

不過實際上我是看到另外一個作法, 所以才看到這篇文章的. 據該文表示, 這可能不適用於Windows系統. 不過對於一篇2001年的文章, 有足夠理由相信作者已經作了許多改變. 這個perl module的名字叫做 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel. 光聽名字就感覺很強大....錯覺?

如果需要cpan上的manual與若干code請點這個連結

正體中文愛好者可以看這篇, 簡介了最基礎的調用方法. 引用裡面的code:

use Spreadsheet::WriteExcel;
my $workbook = Spreadsheet::WriteExcel->new("-");
my $worksheet = $workbook->add_worksheet("MySheet");

建Wworkbooks, worksheet的方法.

$worksheet->write(5, 0, "Division Number:", $bold);
$worksheet->write(5, 1, $division_number);

填值的方法, 大同小異.

字體格式可以另外加上, 例如:

my $bold = $workbook->add_format();
$bold->set_bold();


基本上還有許多參數可以下, 以及許多函式可調用. 可以參照上面的cpan連結.