Junior — Middle
What approaches should be used when writing code to facilitate its automated testing?
sobes.tech AI
Answer from AI
To facilitate automated testing of code in C#, the following approaches are recommended:
- Single Responsibility Principle — each class or method should perform one task, which simplifies writing tests.
- Dependency Injection — injecting dependencies through constructors or properties allows replacing real objects with mocks or stubs in tests.
- Interfaces and abstractions — using interfaces makes it easier to create test doubles.
- Avoid static methods and states — static methods are hard to mock; it's better to use class instances.
- Pure functions and methods without side effects — such methods are easier to test.
- Logging and exception handling — helps identify errors in tests.
Example of dependency injection via constructor:
public interface IDataService
{
string GetData();
}
public class DataService : IDataService
{
public string GetData() => "Real data";
}
public class BusinessLogic
{
private readonly IDataService _dataService;
public BusinessLogic(IDataService dataService)
{
_dataService = dataService;
}
public string ProcessData()
{
var data = _dataService.GetData();
return data.ToUpper();
}
}
In tests, you can replace IDataService with a mock to control behavior and isolate the tested code.