2016-11-17 13 views
1

이 기능을 테스트 해보려고합니다.UnitTest 매개 변수로 DbContext가있는 함수

편집 :

목표는 유효성을 기능이 올바른 작동하는지 확인하는 테스트를 작성하는 것입니다.

나는 단위 테스트를 시작할 것입니다.

이미 컨텍스트를 조롱하려고 시도했지만이 방법은 해결책이 아닙니다.

작동하지 않거나 잘못되었습니다. (연결 문자열 오류)

이 문제에 대한 올바른 접근 방법은 무엇입니까?

아이디어가 있으십니까?

도움 주셔서 감사합니다.

public static string validate(ProductDBEntities _db) 
     { 
      List<string> errorList = new List<string>(); 


      foreach (var error in _db.GetValidationErrors()) 
      { 
       errorList.Add(error.ValidationErrors.FirstOrDefault().ErrorMessage); 
      } 

      if (errorList.Count > 0) 
      { 
       string errors = string.Join("\n", errorList); 
       return errors; 
      } 
      return ""; 
     } 
+3

정확하게 모의하고 싶습니까? 유형을 모방하려면 누군가가 사용하는 경우 메소드가 리턴해야하는 것을 정의해야합니다. 이 코드를 볼 수 없으며 UnitTest 코드도 볼 수 없습니다. – HimBromBeere

+0

빠른 답장을 보내 주셔서 감사합니다. 내가 모의하는 것이 올바른 방법이 아니라는 것을 이해합니다. 하지만이 기능을 테스트하려면 어떻게해야합니까? –

+0

저는 * is *라고 가정합니다. 그러나 가상 멤버 만있는 인터페이스 나 추상 클래스 또는 클래스 만 모의 할 수 있다는 것을 알아 두십시오. 만약 당신이'_db.GetValidationErrors'에 대한 호출을 대체하고 싶다면이 메소드는'ProductDBEntities'에서'virtual'이어야합니다. – HimBromBeere

답변

0

가장 쉬운 해결책은 단위 테스트 할 수 있도록 검증 내부의 논리는 아마도 다음과 같습니다

다음
public static string validate(List<SomeErrorMessageThing> validationErrors) //Whatever type var error is 
     { 
      List<string> errorList = new List<string>(); 

      foreach (SomeErrorMessageThing error in validationErrors) 
      { 
       errorList.Add(error.ValidationErrors.FirstOrDefault().ErrorMessage); 
      } 

      if (errorList.Count > 0) 
      { 
       string errors = string.Join("\n", errorList); 
       return errors; 
      } 
      return ""; 
     } 

당신은 아무것도 조롱 할 필요가 없습니다, 당신은 단지 인에게 수동으로 제작 된 목록을 보낼 수 유효성 검사에서 오류가 발생했습니다.