List<T>
을 반환하는 async
메서드를 단위 테스트하고 있습니다. 이 메서드는 매핑 클래스/인터페이스에 대한 종속성이 있습니다. 내 단위 테스트에서는 moq
을 사용하여 매핑 클래스를 조롱하고 있습니다. 테스트가 제대로 실행되고 반환 된 목록에 항목이 있지만 항목 값이 null입니다. 나는 매핑 클래스 메서드를 올바르게 stubbed-out하지 않았기 때문에 문제가 있다고 생각합니다. 필자는 테스트 경험이별로 없기 때문에 어떤 지침도 환영합니다.Moq를 사용하여 단위 테스트
시험 방법 : 나는 시험 해요 그
[TestMethod]
[TestCategory("CSR.Data.Tests.Services.ServiceSearchTest")]
public void SearchAccount()
{
// Arrange
var mapper = new Mock<CSR.Data.Mapping.Interfaces.IMapper<Account, AccountDTO>>();
mapper.Setup(i => i.Initialize());
mapper.Setup(i => i.ToDomain(It.IsAny<AccountSearchResult>())).Returns(It.IsAny<Account>);
mapper.Setup(i => i.DomainToDto(It.IsAny<Account>())).Returns(It.IsAny<AccountDTO>);
var service = new ServiceSearch(null,mapper.Object);
string accountNumber = "123";
string accountName = "";
// Act
var results = service.SearchAccount(accountNumber, accountName);
// Assert
Assert.IsTrue(results.Result.Count >= 1);
}
방법/등급 :
public class ServiceSearch : IServiceSearch
{
public ServiceSearch(IMapper<Claim, ClaimDTO> claimMapper, IMapper<Account, AccountDTO> accountMapper)
{
_claimMapper = claimMapper;
_accountMapper = accountMapper;
}
public async Task<List<AccountDTO>> SearchAccount(string accountNumber, string accountName)
{
var accounts = new List<Account>();
var accountDTOs = new List<AccountDTO>();
var results = await Task.Run(() => base.AccountSearch(accountNumber, accountName).Result);
if (results != null && results.Count > 0)
{
//Map DH to Domain
_accountMapper.Initialize();
foreach (AccountSearchResult result in results)
{
accounts.Add(_accountMapper.ToDomain(result));
}
//Map Domain to DTO
foreach (Account account in accounts)
{
accountDTOs.Add(_accountMapper.DomainToDto(account));
}
}
return accountDTOs;
}
}
'async' 코드에서'Result' (그리고 아마도'Task.Run')를 사용하지 말아야합니다. –
@StephenCleary ... 작업의 가치를 원하지 않습니까? Task에 문제가있어. 여기서 뛰었 니? 나는 그것이 가치 있다고 생각한다면 또 다른 질문을 할 것이다. –
'await'은 결과를 검색하기위한 적절한 메커니즘입니다. 'Task.Run'은 UI 계층에서 CPU 바운드 메소드를 호출하는 데에만 사용해야하며이 코드에서는 그렇지 않습니다. –