簡體   English   中英

我需要使用 AutoMapper 對這行代碼進行哪些單元測試?

[英]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()返回,然后驗證輸出userDetailsthis.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM