2017-12-12 36 views
1

클라이언트 계정 저장소의 CreateClient 메소드가 호출 된 경우이를 테스트하는 메소드가 있습니다. 시험을보십시오.가짜로 MustHaveHappend (object)를 올바르게 어설 션하는 법

[TestMethod] 
    public void CreateNewBasicClientAccount_NewBasicClient_CreatesNewClientBasicClient() 
    { 
     // Arrange 

     var clientAccountToCreate = new ClientAccount 
     {     
      Name = "Name",     
     }; 

     var clientAccountToCreateDto = AutoMapper.Mapper.Map<ClientAccount, ClientAccountDto>(clientAccountToCreate); 


     var clientAccountRepository = A.Fake<IClientAccountRepository>(); 
     var clientAccountManager = new ClientAccountManager(clientAccountRepository); 

     // Act 

     clientAccountManager.CreateClient(clientAccountToCreate); 

     // Assert 

     A.CallTo(
      () => clientAccountRepository.CreateClient(A<ClientAccountDto>.That.IsNotNull<ClientAccountDto>())) 
      .MustHaveHappened(); 

     A.CallTo(
      () => clientAccountRepository.CreateClient(A<ClientAccountDto>.Ignored)) 
      .MustHaveHappened(); 

     A.CallTo(
      () => clientAccountRepository.CreateClient(clientAccountToCreateDto)) 
      .MustHaveHappened(); 
    } 

시험에서 내 ClientAccountManager 클래스의 법 부분은

public void CreateClient(ClientAccount client) 
    { 
     var clientDto = AutoMapper.Mapper.Map<ClientAccount, ClientAccountDto>(client); 
     _clientAccountRepository.CreateClient(clientDto); 
    } 

처음 두 테스트 통과에 주장 저장소의 CreateClient 메소드를 호출하고 있지만보다 구체적인 3 어설 결과 실패 메시지

InterfaceNameSpace.IClientAccountRepository.CreateClient (clientDto : DtoNameSpace.ClientAccountDto) 한 번 이상 찾을 것으로 예상하지만, 그것을 발견 # 0 호출 시간 :

ClientAccount 클래스와 ClientAccountDto 클래스는 모두 동일한 속성을 갖습니다. 실패한 assert를 전달하는 입력은 코드가 전달되기 위해 유선으로 인식되지만 실패합니다.

답변

1

이것은 메서드에 전달 된 ClientAccountDto이 테스트에서 만든 인스턴스와 같지 않기 때문에 같지 않은 것으로 간주됩니다. 대신,

  • 가 재정의 (당신이 일반적으로 DTO이 필요하지 것이기 때문에, 좋지 않은) ClientAccountDtoEquals 방법은
  • IMapperClientAccountManager에 주입 :

    는이 문제를 해결하기 위해 몇 가지 옵션이 있습니다 정적 Mapper 클래스를 사용하고 ClientAccountDto

  • 테스트 특정 속성 ClientAccountDto의 특정 인스턴스를 반환하도록 IMapper을 구성하고 이 전자 :

    A.CallTo(
        () => clientAccountRepository.CreateClient(A<ClientAccountDto>.That.Matches(x => x.Name == "Name"))) 
        .MustHaveHappened(); 
    

관련없는 참고 : 당신이 A<ClientAccountDto>.That.IsNotNull<ClientAccountDto>() 다시 유형을 지정할 필요가 없습니다, 당신은 단지 A<ClientAccountDto>.That.IsNotNull()를 작성할 수 있습니다.