Coding技巧:快速產生C#含測試資料的類別
在補測試程式的過程,有時需要提供假資料給測試程式以驗證正確性。因為是補的過程,在資料庫中已經有測試資料,所有我想借由這些測試資料快速產出一個假的含資料的類別。但有些類別中的欄位非常多,而且很多又有階層關係,一字一字輸入轉回 C# 的資料類別又慢又沒效率。
在補測試程式的過程,有時需要提供假資料給測試程式以驗證正確性。因為是補的過程,在資料庫中已經有測試資料,所有我想借由這些測試資料快速產出一個假的含資料的類別。但有些類別中的欄位非常多,而且很多又有階層關係,一字一字輸入轉回 C# 的資料類別又慢又沒效率。
我們都知道Visual Studio是地表最強的開發工具,其中與開發人員最相關的二個功能是開發時的IntelliSense與除錯用的IntelliTrace,IntelliTrace雖然強大好用,但是要Ultimate版才有完善支援,當然,那是一筆不小的費用。那麼除了升級為Ultimate版本外,是否還有其他好的選擇?是的,OzCode就是一套筆者要介紹給各位的Visual Studio Debug擴充程式。
好的除錯工具帶你上天堂。OzCode是一套可以解決除錯上煩腦的強大套件。
OzCode正在舉辦一個除錯測試,參加者有機會贏得一套OzCode授權,以下範例以除錯測試中的範例來示範,讓各位讀者看看使用OzCode的前後差異。
第一題
void Main()
{
bool flag = true;
StringBuilder sb = new StringBuilder();
sb.Append("foo " + flag == false + " Bar");
Console.WriteLine (sb.ToString());
}
在LINQPad執行結果是,但是why?
我們看看在Visual Studio下使用IntelliTrace的結果:
雖然對於變數內容的變化,我們可以很容易的透過區域變數視窗來觀察,但對於運算式的運算過程IntelliTrace就比較幫不上忙。我們還是只知道結果是false,但為何是false還是有看沒有懂。
第二題
void Main()
{
var riddle = new Riddle();
((Counter)riddle.counter).Increment();
Console.WriteLine (((Counter)riddle.counter).Count);
}
// Define other methods and classes here
struct Counter
{
private int x;
public void Increment() { this.x++; }
public int Count { get { return this.x; } }
}
class Riddle
{
public readonly object counter = new Counter();
}
執行結果為,但為什麼為是0呢?
第三題
void Main()
{
bool boolean1 = true;
bool boolean2 = true;
bool boolean3 = false;
if (boolean1 = boolean2 && boolean3)
Console.WriteLine ("true");
else
Console.WriteLine ("false");
}
執行結果為。