2013-10-01 1 views
1

나는 FluentValidation을 잘못된 방법으로 사용할 것이라고 확신하고 있으며 주위를 둘러 보았지만 올바른 용어를 사용하지는 못했습니다. 어떤 도움을 주셔서 감사합니다.FluentValidation을 사용하여 조롱 된 함수 결과를 확인 하시겠습니까?

그래서, 라이브러리를 사용하고, 그것은 파일 시스템을 다루고 있기 때문에, 나는 그것을 조롱하고있어 (내가 이렇게 빨리 할 수 ​​있도록이 인터페이스를 가지고 감사!)

나 '개체를 Excel 워크 시트를 대표하는 모의 시도는 기본적으로 "IsEmpty (boolean aBooleanToSet)"라고하는 메소드를 가지고 있습니다.

내가의 라인을 따라 MOQ와이를 작성할 수 있습니다

mockWorkbook.Setup(m => m.IsEmpty(It.IsAny<bool>())).Returns(true); 

내 Validator 클래스는 매우 간단하며 다음과 같습니다 : 나는, xUnit의를 다음의 시험에 사용했다

public class InvoiceDetailsWorksheetValidator : AbstractValidator<IXLWorksheet> 
{ 
    public InvoiceDetailsWorksheetValidator() 
    { 
     RuleFor(x => x.IsEmpty()) 
      .NotEqual(true).WithMessage("Worksheet must not be empty."); 
    } 
} 

.net :

[Fact] 
public void Validate_WithFirstWorksheetEmpty_ReturnsInvalid() 
{ 
     // Get the otherwise valid worksheet 
     var mockWorkbook = TestHelper.GetMockValidInvoiceDetailsWorksheet(); 

     // Set the one specific value to a mocked failure 
     mockWorkbook.Setup(m => m.IsEmpty(It.IsAny<bool>())).Returns(true); 

     // Pass the mock object to the validator 
     var validationResults = new InvoiceDetailsWorksheetValidator().Validate(mockWorkbook.Object); 

     // Assert that the validator finds it invalid 
     Assert.False(validationResults.IsValid); 
} 

테스트를 통과했을 때 테스트를 통과했을 때 다음 오류가 발생했습니다. fr 톰 FluentValidation :

System.InvalidOperationException

속성 이름이 자동으로 표현 판별 할 수 없습니다 X => x.IsEmpty().
'WithName'을 (를) 호출하여 사용자 지정 속성 이름을 지정하십시오.

내가 뭘 잘못하고 있니?

답변

1

Jeremy Skinner FluentValidation의 저자는 친절하게도 an explanation on its discussion forum을 제공했습니다.

기본적으로 FluentValidation을 사용하면 메서드를 테스트 할 수 있지만 FluentValidation은 본질적으로 테스트 속성으로 작성되기 때문에 속성 이름을 지정해야합니다. 나는

 RuleFor(x=>x.IsEmpty()) 
      .NotEqual(true).WithMessage("Worksheet must not be empty.").OverridePropertyName("IsEmpty"); 

(AS 보조 노트를 :

 RuleFor(x=>x.IsEmpty()) 
      .NotEqual(true).WithMessage("Worksheet must not be empty."); 

... 그래서 같은 말 상에 OverridePropertyName() 방법을 추가

그래서 해결책은 내 원래의 검증을하는 것입니다 매우 유용합니다. 비즈니스 객체에 대한 유효성 검사를 수행해야하는 경우이 라이브러리를 사용하는 것이 좋습니다. 매우 편리 할 뿐이지 만 Jeremy는 프로젝트와 사용자를 지원하는 데 큰 도움이됩니다.)