[英]In C#, how do I unit-test client-side user interaction and javascript (jQuery) code?
[英]What do I need to unit-test for this line of code using AutoMapper?
我以前從未使用過 AutoMapper,所以我想知道我需要為此特定代碼行編寫哪些單元測試:
IEnumerable<UserDetail> userDetails =
this.mapper.Map<IEnumerable<Entities.User>, IEnumerable<UserDetail>>(users);
有問題的行在這個方法中:
public IEnumerable<UserDetail> GetUserDetails()
{
var users = this.userData.GetUsers();
//question is about testing this line
IEnumerable<UserDetail> userDetails =
this.mapper.Map<IEnumerable<Entities.User>, IEnumerable<UserDetail>>(users);
return userDetails;
}
目前,單元測試提供了一個用戶的模擬列表,從this.userData.GetUsers()
返回,然后驗證輸出userDetails
在this.userData.GetUsers()
包含相同的數據
第一個單元測試如下所示:
[Test]
public async Task VerifyAutoMapperProfile()
{
//Assert
this.MapperConfig.AssertConfigurationIsValid();
}
[Test]
public async Task UserService_GetUsers_Returns_IEnumerableUserDetails()
{
//Arrange
IList<Entities.User> usersFromData = this.GetMockUsers();
Mock<IUserDataAccess> mockUserData = new Mock<IUserDataAccess>();
mockUserData
.Setup(d => d.GetUsers())
.Returns(usersFromData);
//this loads the same AutoMapper.Profile that the application uses
IMapper mapper = this.MapperConfig.CreateMapper();
var userService = new UserService(mockUserData.Object, mapper);
//Act
var userDetails = userService.GetUserDetails();
//Assert
userDetails.Should().BeAssignableTo<IEnumerable<UserDetail>>();
userDetails.Should().HaveCount(usersFromData.Count);
userDetails.Should().NotContainNulls();
userDetails.Should().OnlyHaveUniqueItems();
userDetails.Should().AllBeOfType<UserDetail>();
foreach (Entities.User user in usersFromData)
{
var userDetail = new UserDetail {FullName = user.FullName, Guid = user.Guid};
userDetails.Should().ContainEquivalentOf(userDetail);
}
}
所以問題是,我應該在這個測試中為我指示的行添加任何覆蓋,還是應該為該行創建單獨的測試? (我將為此方法創建更多的單元測試 - 但我的問題是專門詢問IMapper.Map
方法。我是否需要涵蓋該方法引發的故障/異常?僅擁有this.MapperConfig.AssertConfigurationIsValid()
就足夠了this.MapperConfig.AssertConfigurationIsValid()
?
在您的GetUserDetails()方法中,您做了兩件事。 首先是加載用戶,其次是轉換。 所以基本上,你的單元測試只需要驗證這兩件事。 首先是否調用了 GetUsers()? 其次是 Map() 是否被調用? 還有一件額外的事情,如果你加載 10 個用戶,你希望得到 10 個用戶(不要檢查用戶屬性)。
為什么你不需要檢查用戶屬性? 因為映射邏輯不在您的方法中,所以您不需要對其進行單元測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.