在我們,我們結束了一個共享的測試夾具這給了很多的問題,我們的單元測試的最後一個項目。所以在我們目前的項目中,我已經看到了構建器模式。我們在開發機器上的內存中運行單元測試,並在構建服務器上運行數據庫。如何有效地創建和使用生成器模式
目前我有一個學生產生例如以下製造商T4模板:
public class StudentBuilder : Builder<Student, StudentBuilder>
{
public StudentBuilder()
{
IsMale = true;
}
public StudentBuilder WithFirstName(string firstName)
{
this.FirstName = firstName;
return this;
}
public StudentBuilder WithLastName(string lastName)
{
this.LastName = lastName;
return this;
}
public StudentBuilder WithIsMale(bool isMale)
{
this.IsMale = isMale;
return this;
}
internal override Student Construct()
{
Student result = new Student()
{
FirstName = FirstName ?? "FirstName:" + id.ToString(),
LastName = LastName ?? "LastName:" + id.ToString(),
IsMale = IsMale,
Id = id,
};
/ return result;
}
}
海槽基類,我可以以下列方式使用:
Student wouter = StudentBuilder.Build()
.WithFirstName("Wouter")
.WithLastName("de Kort");
List<Student> students = StudentBuilder.Build().Multiple(10, (builder, index) => builder.WithFirstName("FirstName" + index));
我們運行在我們的構建服務器上進行集成測試以確保所有內容對數據庫都有效這意味着我們必須確保滿足所有參考約束條件。 但是隨後問題就開始了。
例如,一個學生需要有一個導師,導師所屬的一所學校,一所學校的一個城市,一個城市一個....
這將導致類似的代碼:
StudentBuilder.Build().WithMentor(MentorBuilder.Build().WithSchool(SchoolBuilder.Build().WithCity(CityBuilder.Build()))
我應該如何優化呢?我想過在每個生成器的構建方法做了「默認的建設」,但如果我將建立10個學生,然後它會導致10個導師在10所學校的10個城市中10 ....
也許創造一個像WithAllCity(..),在一切的(學校)
任何想法的方法呢?我是否正確地使用Builder模式? Director類能幫助嗎?還是應該從StudentBuilder繼承類來解決這些不同的情況?
或者另一個想法,我應該將數據發送到數據庫之前在我的業務層添加更多的驗證?然後,我會在單元測試中發現內存數據庫中的更多錯誤。
'我們在內存上開發的機器和反對在構建server.'數據庫運行單元測試 - 這聽起來很痛苦的解決。你的項目如何運作? –
我使用http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5創建具有統一部分的不同app.config設置,以便從內存切換到數據庫。開發人員可以讓單元測試通過切換構建配置來定位數據庫。這加快了開發速度(在內存測試中運行速度非常快),但也捕獲了內存虛假不能捕獲的錯誤。但是在那裏你立刻就會有這個問題,爲什麼我問這個問題。一個非常長的構建器設置,以確保測試通過構建服務器 –