Это метод, с которым я борюсь для написания тестов.
Код: Выделить всё
public async Task LoadAdjustmentsAsync(TimeFilter filter) {
var query = _context.Adjustments.AsQueryable();
DateTime today = DateTime.Now;
switch(filter) {
case TimeFilter.OneWeek:
query = query.Where(s => s.Date >= today.AddDays(-7));
break;
case TimeFilter.TwoWeeks:
query = query.Where(s => s.Date >= today.AddDays(-14));
break;
case TimeFilter.OneMonth:
query = query.Where(s => s.Date >= today.AddMonths(-1));
break;
case TimeFilter.AllTime:
// No filter.
default:
break;
}
var adjustments = await query.OrderByDescending(s => s.Date).ToListAsync();
Adjustments.Clear();
foreach (var adjustment in adjustments) {
Adjustments.Add(adjustment);
}
}
Код: Выделить всё
[TestClass]
public class AdjustmentsViewModelTests {
private Mock _mockContext = null!;
private Mock _mockAdjustments = null!;
private AdjustmentsViewModel _viewModel = null!;
[TestInitialize]
public void Setup() {
_mockAdjustments = new Mock();
_mockContext = new Mock();
var data = new List {
new Adjustment { Date = DateTime.Now.AddDays(-1) },
new Adjustment { Date = DateTime.Now.AddDays(-8) },
new Adjustment { Date = DateTime.Now.AddDays(-15) }
}.AsQueryable();
_mockAdjustments.As().Setup(m => m.Provider).Returns(data.Provider);
_mockAdjustments.As().Setup(m => m.Expression).Returns(data.Expression);
_mockAdjustments.As().Setup(m => m.ElementType).Returns(data.ElementType);
_mockAdjustments.As().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());
_mockContext.Setup(c => c.Adjustments).Returns(_mockAdjustments.Object);
_viewModel = new AdjustmentsViewModel(_mockContext.Object);
}
[TestMethod]
public async Task LoadAdjustmentsAsync_OneWeekFilter() {
await _viewModel.LoadAdjustmentsAsync(TimeFilter.OneWeek);
Assert.AreEqual(1, _viewModel.Adjustments.Count);
Assert.IsTrue(_viewModel.Adjustments.All(a => a.Date >= DateTime.Now.AddDays(-7)));
}
}
Код: Выделить всё
[TestClass]
public class AdjustmentsViewModelTests {
private Mock _mockContext = null!;
private AdjustmentsViewModel _viewModel = null!;
[TestInitialize]
public void Setup() {
var adjustments = new List {
new Adjustment { Date = DateTime.Now.AddDays(-1) },
new Adjustment { Date = DateTime.Now.AddDays(-8) },
new Adjustment { Date = DateTime.Now.AddDays(-15) }
};
_mockContext = new Mock();
_mockContext.Setup(c => c.Adjustments).ReturnsDbSet(adjustments);
_viewModel = new AdjustmentsViewModel(_mockContext.Object);
}
[TestMethod]
public async Task LoadAdjustmentsAsync_OneWeekFilter() {
await _viewModel.LoadAdjustmentsAsync(TimeFilter.OneWeek);
Assert.AreEqual(1, _viewModel.Adjustments.Count);
Assert.IsTrue(_viewModel.Adjustments.All(a => a.Date >= DateTime.Now.AddDays(-7)));
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... re-and-moq