Middle+
Ревью: тест CalendarService.cs: public class CalendarService { public bool IsWorkingDay() { switch (DateTime.Now.DayOfWeek) { case DayOfWeek.Saturday: case DayOfWeek.Sunday: return false; default: return true; } } } CalendarServiceTests.cs: public class CalendarServiceTests { [Fact] public void IsWorkingDay_Always_ReturnsTrue() { // Arrange var calendarService = new CalendarService(); // Act var actual = calendarService.IsWorkingDay(); // Assert Assert.True(actual); } }
sobes.tech AI
Answer from AI
This test has a critical flaw: the IsWorkingDay method depends on the current date (DateTime.Now), and the test always expects true, which is incorrect for weekends.
To make the test correct and reliable, you should:
- Inject a time dependency (for example, via the IDateTimeProvider interface) to allow setting a fixed time in tests.
- Write several tests for different days of the week to verify the method's correctness.
Example of improved code:
public interface IDateTimeProvider
{
DateTime Now { get; }
}
public class SystemDateTimeProvider : IDateTimeProvider
{
public DateTime Now => DateTime.Now;
}
public class CalendarService
{
private readonly IDateTimeProvider _dateTimeProvider;
public CalendarService(IDateTimeProvider dateTimeProvider)
{
_dateTimeProvider = dateTimeProvider;
}
public bool IsWorkingDay()
{
switch (_dateTimeProvider.Now.DayOfWeek)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
return false;
default:
return true;
}
}
}
Test:
public class FakeDateTimeProvider : IDateTimeProvider
{
public DateTime Now { get; set; }
}
public class CalendarServiceTests
{
[Theory]
[InlineData(DayOfWeek.Monday, true)]
[InlineData(DayOfWeek.Saturday, false)]
[InlineData(DayOfWeek.Sunday, false)]
public void IsWorkingDay_ReturnsExpectedResult(DayOfWeek day, bool expected)
{
var fakeProvider = new FakeDateTimeProvider { Now = new DateTime(2023, 1, 2).AddDays((int)day - 1) };
var service = new CalendarService(fakeProvider);
var result = service.IsWorkingDay();
Assert.Equal(expected, result);
}
}
This approach makes the tests deterministic and covers different scenarios.