मैं अपने कोड का परीक्षण करने में मेरी सहायता करने के लिए एक कक्षा लिख रहा हूं। ऐसा लगता है:क्या यूनिट परीक्षण के लिए कोड जोड़ना बुरा है?
/// <summary>
/// Wrapper for the LogManager class to allow us to stub the logger
/// </summary>
public class Logger
{
private static ILogger _logger = null;
/// <summary>
/// This should be called to get a valid logger.
/// </summary>
/// <returns>A valid logger to log issues to file.</returns>
public static ILogger GetLogger()
{
if (_logger == null)
_logger = LogManager.GetLogger("logger");
return _logger;
}
/// <summary>
/// This is used by unit tests to allow a stub to be used as a logger.
/// </summary>
/// <param name="logger"></param>
/// <returns></returns>
public static ILogger GetLogger(ILogger logger)
{
_logger = logger;
return _logger;
}
}
दूसरी विधि केवल यूनिट परीक्षण के लिए है। मैं कभी भी अपने उत्पादन कोड में इसे कॉल करने का इरादा नहीं रखता।
क्या यह बुरा अभ्यास है? क्या मुझे ऐसा कोई और तरीका मिलना चाहिए जो ऐसा नहीं करता?
क्या कोई कारण है कि आप मोजे का उपयोग नहीं कर रहे हैं? – arootbeer
मेरे एक प्रोफेसर ने मुझे एक बार कहा कि यदि आप वास्तव में मजबूत और लचीला सॉफ्टवेयर विकसित करना चाहते हैं, तो पहले अपने परीक्षण के मामलों को लिखें और फिर अपनी कार्यक्षमता को लागू करें। – Chris
@arootbeer - ऐसा इसलिए है कि मैं mocks का उपयोग कर सकते हैं। मैं अपने कोड के माध्यम से इस लॉगर का उपयोग करता हूं। जब मैं इकाई परीक्षण करता हूं तो मैं लॉगर के लिए एक स्टब डालने में सक्षम होना चाहता हूं। जब मैं इकाई परीक्षण करता हूं तो मैं दूसरी विधि का उपयोग करके लॉगर का एक स्टब डाल दूंगा। उत्पादन के दौरान सामान्य लॉगर का उपयोग किया जाएगा। – Vaccano