by Anonymous » 15 Feb 2025, 17:08
Wenn ich meine Methode testen möchte, erhalte ich die Ausnahme: system.invalidoperationException: Die Quelle 'iQueryable' implementiert nicht 'iAsyncenumerable '. Nur Quellen, die 'iAsyncenumerable' implementieren`public async Task GetInactiveUsers(IUserRepository userRepository, IMeetingRepository meetingRepository, int daysThreshold)
{
var usersWithLastActivity = await userRepository.Queryable()
.Select(user => new
{
User = user,
LastMeetingDate = meetingRepository.Queryable()
.Where(meeting => meeting.UserMeetings.Any(userMeeting => userMeeting.UserId == user.Id))
.OrderByDescending(meeting => meeting.MeetingAt)
.Select(meeting => meeting.MeetingAt)
.FirstOrDefault()
})
.ToListAsync();
return usersWithLastActivity
.Where(userWithDate =>
{
if (userWithDate?.LastMeetingDate == null)
return false;
var daysSinceLastActivity = (DateTime.UtcNow.Date - userWithDate.LastMeetingDate.Date).Days;
return daysSinceLastActivity == daysThreshold;
})`
< /code>
Meine Testklasse: < /p>
public async Task GetInactiveUsers_ReturnsCorrectUsers()
{
// Arrange
var users = new List
{
new() { Id = 1, UserName = "User1" },
new() { Id = 2, UserName = "User2" },
new() { Id = 3, UserName = "User3" }
};
var meetings = new List
{
new() { Id = 1, MeetingAt = DateTime.UtcNow.AddDays(-7), UserMeetings = new List { new() { UserId = 1 } } },
new() { Id = 2, MeetingAt = DateTime.UtcNow.AddDays(-10), UserMeetings = new List { new() { UserId = 2 } } },
new() { Id = 3, MeetingAt = DateTime.UtcNow.AddDays(-3), UserMeetings = new List { new() { UserId = 3 } } }
};
var mockUserRepository = new Mock();
mockUserRepository.Setup(repo => repo.Queryable()).Returns(users.AsQueryable());
var mockMeetingRepository = new Mock();
mockMeetingRepository.Setup(repo => repo.Queryable()).Returns(meetings.AsQueryable());
var service = new NotificationOfInactiveUsersHostedService(
new Mock().Object,
new Mock().Object
);
// Act
var result = await service.GetInactiveUsers(mockUserRepository.Object, mockMeetingRepository.Object, 7);
// Assert
Assert.Single(result);
Assert.Equal(7, (DateTime.UtcNow.Date - meetings.First(m => m.UserMeetings.Any(um => um.UserId == result.First().Id)).MeetingAt.Date).Days);
}
< /code>
Ich sehe viele Beispiele, um diese Ausnahme zu lösen. Ich habe viele Möglichkeiten ausprobiert, wie ich sie finde, aber nichts hilft mir.
Wenn ich meine Methode testen möchte, erhalte ich die Ausnahme: system.invalidoperationException: Die Quelle 'iQueryable' implementiert nicht 'iAsyncenumerable '. Nur Quellen, die 'iAsyncenumerable' implementieren`public async Task GetInactiveUsers(IUserRepository userRepository, IMeetingRepository meetingRepository, int daysThreshold)
{
var usersWithLastActivity = await userRepository.Queryable()
.Select(user => new
{
User = user,
LastMeetingDate = meetingRepository.Queryable()
.Where(meeting => meeting.UserMeetings.Any(userMeeting => userMeeting.UserId == user.Id))
.OrderByDescending(meeting => meeting.MeetingAt)
.Select(meeting => meeting.MeetingAt)
.FirstOrDefault()
})
.ToListAsync();
return usersWithLastActivity
.Where(userWithDate =>
{
if (userWithDate?.LastMeetingDate == null)
return false;
var daysSinceLastActivity = (DateTime.UtcNow.Date - userWithDate.LastMeetingDate.Date).Days;
return daysSinceLastActivity == daysThreshold;
})`
< /code>
Meine Testklasse: < /p>
public async Task GetInactiveUsers_ReturnsCorrectUsers()
{
// Arrange
var users = new List
{
new() { Id = 1, UserName = "User1" },
new() { Id = 2, UserName = "User2" },
new() { Id = 3, UserName = "User3" }
};
var meetings = new List
{
new() { Id = 1, MeetingAt = DateTime.UtcNow.AddDays(-7), UserMeetings = new List { new() { UserId = 1 } } },
new() { Id = 2, MeetingAt = DateTime.UtcNow.AddDays(-10), UserMeetings = new List { new() { UserId = 2 } } },
new() { Id = 3, MeetingAt = DateTime.UtcNow.AddDays(-3), UserMeetings = new List { new() { UserId = 3 } } }
};
var mockUserRepository = new Mock();
mockUserRepository.Setup(repo => repo.Queryable()).Returns(users.AsQueryable());
var mockMeetingRepository = new Mock();
mockMeetingRepository.Setup(repo => repo.Queryable()).Returns(meetings.AsQueryable());
var service = new NotificationOfInactiveUsersHostedService(
new Mock().Object,
new Mock().Object
);
// Act
var result = await service.GetInactiveUsers(mockUserRepository.Object, mockMeetingRepository.Object, 7);
// Assert
Assert.Single(result);
Assert.Equal(7, (DateTime.UtcNow.Date - meetings.First(m => m.UserMeetings.Any(um => um.UserId == result.First().Id)).MeetingAt.Date).Days);
}
< /code>
Ich sehe viele Beispiele, um diese Ausnahme zu lösen. Ich habe viele Möglichkeiten ausprobiert, wie ich sie finde, aber nichts hilft mir.