我正在為服務類撰寫一個簡單的 xunit 測驗用例。我已經嘲笑_userAPIRepository但它回傳空值。它應該回傳teacherDetails。
下面是服務類方法和xunit測驗用例方法。
服務方式
public async Task<List<TeacherDto>> GetTeacherDetails(Teacher teacher)
{
List<TeacherDto> teacherDetails = new List<TeacherDto>();
UserByUsername userByUsername = new UserByUsername
{
Username = teacher.Name,
Id = teacher.Id
};
teacherDetails = await _userServiceAPI.GetUserIdsByName(userByUsername);
return teacherDetails;
}
xunit 測驗用例
[Fact()]
public async Task GetUserDetails()
{
//Arrange
List<TeacherDto> teacherDetails = ServiceDataSource.teacherDetails();
Teacher teacher = ServiceDataSource.teacher();
UserByUsername userByUsername = new UserByUsername
{
Username = teacher.Name,
Id = teacher.Id
};
_userAPIRepository.Setup(x => x.GetUserIdsByName(userByUsername)).Returns(Task.FromResult(teacherDetails);
var result = await _userServiceAPI.GetTeacherDetails(teacher);
//Assert
Assert.True(result.Count > 0);
}
uj5u.com熱心網友回復:
當引數設定與執行測驗時傳入的引數不匹配時,模擬默認回傳 null。在所呈現的情況下,使用的實際實體/參考與在測驗物件中創建的實體不匹配。
使用引數匹配器從模擬中獲取所需的行為,因為引數是在被測主題中初始化的。
[Fact()]
public async Task GetUserDetails() {
//Arrange
List<TeacherDto> teacherDetails = ServiceDataSource.teacherDetails();
Teacher teacher = ServiceDataSource.teacher();
_userAPIRepository
.Setup(x => x.GetUserIdsByName(It.Is<UserByUsername>(u =>
u.Username == teacher.Name && u.Id == teacher.Id)))
.ReturnsAsync(teacherDetails);
//Act
var result = await _userServiceAPI.GetTeacherDetails(teacher);
//Assert
Assert.True(result.Count > 0);
}
請注意使用It.Is<>添加具有特定過濾器/謂詞的引數匹配器。
如果不需要實際匹配成員并只接受 any UserByUsername,則It.IsAny<>可以改為使用
例如
[Fact()]
public async Task GetUserDetails() {
//Arrange
List<TeacherDto> teacherDetails = ServiceDataSource.teacherDetails();
Teacher teacher = ServiceDataSource.teacher();
_userAPIRepository
.Setup(x => x.GetUserIdsByName(It.IsAny<UserByUsername>()))
.ReturnsAsync(teacherDetails);
//Act
var result = await _userServiceAPI.GetTeacherDetails(teacher);
//Assert
Assert.True(result.Count > 0);
}
參考Moq Quickstart以更好地了解如何使用該庫
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329746.html
