要創建我們的測試數據,我們使用了Builder模式的以下變化(簡化的例子!):如何基於另一個類生成代碼?
Sample類:
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
建設者:
public class PersonBuilder
{
private string name;
private string country;
public PersonBuilder()
{
SetDefaultValues();
}
private void SetDefaultValues()
{
name = "TODO";
country = "TODO";
}
public Person Build()
{
return new Person
{
Name = name,
Country = country
};
}
public PersonBuilder WithName(string name)
{
this.name = name;
return this;
}
public PersonBuilder WithCountry(string country)
{
this.country = country;
return this;
}
}
注意:這個例子的上下文本身並不相關。這裏最重要的是,在這個例子中,像PersonBuilder這樣的構建器類可以通過查看實體類(Person)並應用相同的模式完全生成 - 請參見下文。
現在想象一下person類有15個屬性而不是2個。它需要一些monkeywork來實現構建器類,而理論上它可以自動從Person類生成。我們可以使用代碼生成來快速設置構建器類,並在需要時添加自定義代碼。
代碼生成過程必須知道上下文(人類的名稱和屬性),所以簡單的基於文本的代碼生成或正則表達式的魔法不會感覺就在這裏。一個動態的解決方案,不是基於文本的,可以從Visual Studio內部快速觸發。
我正在尋找執行此類場景的代碼生成的最佳方法。 反思? CodeSmith中? T4模板? Resharper帶宏模板?
我期待看到一些很好的答案:)
我們已經在我們的單元測試中廣泛地使用了mocking,但是我從來沒有想過爲此使用mock :)。我認爲這將是一個很好的解決這個問題的方法,但不是一般問題,它比測試更廣泛。但是,非常感謝這個答案! – 2011-03-27 12:12:46