Junior — Middle
Чӣ гуна ислоҳ кардани вобастагиҳо ба осон кардани раванди санҷиши кода кӯмак мекунад?
sobes.tech AI
Ҷавоб аз AI
Қатъиятни Инверсиялаш Принсипи (Dependency Inversion Principle) юқори даражадаги логикани аниқлаштириш ва уларни аниқ реализациялардан мустақил қилиш имконини беради, уларни абстракциялар (масалан, интерфейслар) орқали алмаштириш. Бу тестлашни осонлаштиради, чунки тестларда реал зависликлар ўрнига моклар ёки стублар қўлланиши мумкин, ва бу тестланган кодни ўзгартирмайди.
C#да мисол:
public interface ILogger
{
void Log(string message);
}
public class FileLogger : ILogger
{
public void Log(string message) { /* файлга ёзиш */ }
}
public class UserService
{
private readonly ILogger _logger;
public UserService(ILogger logger)
{
_logger = logger;
}
public void CreateUser(string name)
{
// фойдаланувчи яратиш логикаси
_logger.Log($"Фойдаланувчи {name} яратилди");
}
}
// Тестларда, мок ILogger ўтказиш мумкин:
public class MockLogger : ILogger
{
public List<string> Messages = new List<string>();
public void Log(string message) => Messages.Add(message);
}
Шу тарзда, тестлар реал реализацияларга боғлиқ эмас ва логикани изоляцияланган ҳолда текшириш мумкин.