मैं सी # में अपनी डेटा एक्सेस लेयर इकाई परीक्षण में एक प्रभावी तरीका खोजने की कोशिश कर रहा हूं। मैं प्राथमिक जावा डेवलपर हूं और लगभग 6 महीनों के लिए सी # का उपयोग किया है, अतीत में मैंने एक ज्ञात राज्य डेटाबेस के खिलाफ परीक्षण करने के लिए डीबीयूनीट नामक लाइब्रेरी का उपयोग किया है। मैं एक समान सक्रिय लाइब्रेरी नहीं ढूंढ पा रहा हूं जिसका उपयोग किया जा सकता है, निकटतम nDBUnit लगता है लेकिन यह थोड़ी देर के लिए सक्रिय नहीं है।यूनिट परीक्षण डेटा एक्सेस लेयर के तरीके
सी # में कैसे और क्यों पर कई विरोधाभासी तरीकों की प्रतीत होती है। आदर्श रूप से मैं डेटाबेस से कनेक्ट करने की आवश्यकता के बिना मॉकिंग का उपयोग करके डेटा एक्सेस लेयर का परीक्षण करना चाहता हूं और फिर यूनिट परीक्षण प्रक्रिया को अलग-अलग परीक्षणों में परीक्षण करता हूं।
प्रणाली मैं पर काम कर रहा हूँ में, डेटा का उपयोग परत (इकाई की रूपरेखा के उपयोग के बिना) ADO.net उपयोग करने के लिए एक एसक्यूएल सर्वर पर दुकान प्रक्रियाओं कॉल करने के लिए है।
नीचे एक नमूना कोड है जिसके साथ मुझे काम करना है; मॉकिंग पथ पर जाने के लिए, मुझे एसक्यूएल कॉमांड (आईडीबीकॉमैंड का उपयोग करके) और/या एसक्यूएलकनेक्शन का नकल करने में सक्षम होना होगा।
तो मेरे सवाल का क्या (यदि वहाँ ऐसी बात है) यह करने के लिए सबसे अच्छा तरीका हो रहा है है? अभी तक एकमात्र तरीका प्रोक्सी ऑब्जेक्ट बनाना होगा जो कि कन्स्ट्रक्टर में पास हो जाए, ताकि यह परीक्षण के लिए मॉक किए गए एसक्यूएल * ऑब्जेक्ट्स को वापस कर सके।
मुझे अभी उपलब्ध सभी उपलब्ध सी # नकली पुस्तकालयों को देखने का मौका नहीं मिला है।
public class CustomerRepository : ICustomerRepository
{
private string connectionString;
public CustomerRepository (string connectionString)
{
this.connectionString = connectionString;
}
public int Create(Customer customer)
{
SqlParameter paramOutId = new SqlParameter("@out_id", SqlDbType.Int);
paramOutId.Direction = ParameterDirection.Output;
List<SqlParameter> sqlParams = new List<SqlParameter>()
{
paramOutId,
new SqlParameter("@name", customer.Name)
}
SqlConnection connection = GetConnection();
try
{
SqlCommand command = new SqlCommand("store_proc_name", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddRange(sqlParams.ToArray());
int results = command.ExecuteNonQuery();
return (int) paramOutId.Value;
}
finally
{
CloseConnection(connection);
}
}
}
पर एक नज़र डालें मुझे लगता है कि यह गलत तरीका है, और भंगुर परीक्षण की ओर जाता है। मेरे तर्क और क्यों एक उदाहरण के लिए मेरा जवाब देखें। –