मैंने ऑटोफिक्चर http://autofixture.codeplex.com/ का उपयोग शुरू किया क्योंकि मेरे यूनिट परीक्षणों को बहुत सारे डेटा सेटअप के साथ फूला गया था। मैं अपने यूनिट परीक्षण लिखने के बजाय डेटा सेट अप करने पर अधिक समय बिता रहा था। यहाँ कैसे मेरी प्रारंभिक इकाई परीक्षण (DDD नीला किताब से कार्गो आवेदन नमूना से लिया उदाहरण)ऑटोफिक्चर रीफैक्टरिंग
[Test]
public void should_create_instance_with_correct_ctor_parameters()
{
var carrierMovements = new List<CarrierMovement>();
var deparureUnLocode1 = new UnLocode("AB44D");
var departureLocation1 = new Location(deparureUnLocode1, "HAMBOURG");
var arrivalUnLocode1 = new UnLocode("XX44D");
var arrivalLocation1 = new Location(arrivalUnLocode1, "TUNIS");
var departureDate1 = new DateTime(2010, 3, 15);
var arrivalDate1 = new DateTime(2010, 5, 12);
var carrierMovement1 = new CarrierMovement(departureLocation1, arrivalLocation1, departureDate1, arrivalDate1);
var deparureUnLocode2 = new UnLocode("CXRET");
var departureLocation2 = new Location(deparureUnLocode2, "GDANSK");
var arrivalUnLocode2 = new UnLocode("ZEZD4");
var arrivalLocation2 = new Location(arrivalUnLocode2, "LE HAVRE");
var departureDate2 = new DateTime(2010, 3, 18);
var arrivalDate2 = new DateTime(2010, 3, 31);
var carrierMovement2 = new CarrierMovement(departureLocation2, arrivalLocation2, departureDate2, arrivalDate2);
carrierMovements.Add(carrierMovement1);
carrierMovements.Add(carrierMovement2);
new Schedule(carrierMovements).ShouldNotBeNull();
}
यहाँ की तरह दिखता है का एक उदाहरण है कि कैसे मैं AutoFixture
साथ यह refactor करने के लिए[Test]
public void should_create_instance_with_correct_ctor_parameters_AutoFixture()
{
var fixture = new Fixture();
fixture.Register(() => new UnLocode(UnLocodeString()));
var departureLoc = fixture.CreateAnonymous<Location>();
var arrivalLoc = fixture.CreateAnonymous<Location>();
var departureDateTime = fixture.CreateAnonymous<DateTime>();
var arrivalDateTime = fixture.CreateAnonymous<DateTime>();
fixture.Register<Location, Location, DateTime, DateTime, CarrierMovement>(
(departure, arrival, departureTime, arrivalTime) => new CarrierMovement(departureLoc, arrivalLoc, departureDateTime, arrivalDateTime));
var carrierMovements = fixture.CreateMany<CarrierMovement>(50).ToList();
fixture.Register<List<CarrierMovement>, Schedule>((carrierM) => new Schedule(carrierMovements));
var schedule = fixture.CreateAnonymous<Schedule>();
schedule.ShouldNotBeNull();
}
private static string UnLocodeString()
{
var stringBuilder = new StringBuilder();
for (int i = 0; i < 5; i++)
stringBuilder.Append(GetRandomUpperCaseCharacter(i));
return stringBuilder.ToString();
}
private static char GetRandomUpperCaseCharacter(int seed)
{
return ((char)((short)'A' + new Random(seed).Next(26)));
}
मैं चाहूँगा करने की कोशिश की पता है कि इसे पुन: सक्रिय करने का बेहतर तरीका है या नहीं। इससे कम और आसान करना चाहते हैं।
मुझे कोई दिलचस्पी पाठक के लिए उस वर्ग के कार्यान्वयन छोड़ देंगे, लेकिन आप तो इतना है कि यह रजिस्टर कर सकता है आपकी टिप्पणियों के लिए आभार। हालांकि मेरे पास ऑटोफिक्चर Ploeh.AutoFixture.ObjectCreationException: ऑटोफिक्स्चर सिस्टम प्रकार का उदाहरण बनाने में असमर्थ था। Colections.Generic.IList'1 [DDDBookingApplication.Domain.Voyage.CarrierMovement], क्योंकि इसमें कोई सार्वजनिक नहीं है निर्माता। मुझे लगता है कि मुझे कैरियर मेवमेंट बनाने का तरीका कहना चाहिए? –
मैं सभी इंस्टॉलेशन के लिए डेटा के अलग-अलग सेट भी रखना चाहता हूं। आपके विचार क्या हैं? –
सभी विवरणों के लिए धन्यवाद। परीक्षण अब छोटा है और गुजरता है :) –