Effort 및 TypeName 특성을 사용하여 테스트

c# dbcontext effort entity-framework unit-testing

문제

몇 가지 코드를 테스트하고 싶습니다. DAL ( Entity Framework 6 - Code first )에 정의 된 DbContext를 위조해야합니다. 주로 잘 진행되었지만 데이터 모델 클래스가 TypeName 특성을 사용할 때 문제가 발생했습니다. 나는 그 뼈대를 보여주기 위해 해골을 만들었다.

데이터 모델 :

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

컨텍스트 정의

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

그리고 어떤 데이터로 가짜 컨텍스트를 생성하는 가짜 메소드 :

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

문제는 TypeName 특성입니다. 주석 처리가 끝나면 테스트가 통과됩니다. 하지만 이것이 가능하다면 System.InvalidOperationException 발생하고 말합니다.

시퀀스에 일치하는 요소가 없습니다.

요약하면 다음과 같습니다.

  • 데이터 모델 클래스에 애트리뷰트가있는 경우에도 테스트에서 Effort를 사용할 수있는 방법이 있습니까?
  • 그렇지 않다면 가짜 DbContext를 생성하기 위해 어떤 대체 방법을 사용해야합니까?

수락 된 답변

EntityTypeConfigurations를 살펴보고 거기에 매핑을 옮기는 것이 좋습니다. http://www.entityframeworktutorial.net/code-first/entitytypeconfiguration-class.aspx

현재 사용중인 DB를 고려하지 않고 Entity Framework를 고려하지 않고 엔티티 / 인터페이스를 사용하여 테스트 할 수 있습니다.

또한, 당신은 단위 테스트 대신 통합 테스트를하고 있다고 생각합니다. 단위 테스트를하려면 실제 DbContext 사용을 제거해야합니다 (현재 구현은 DAL에 대한 구체적인 EF 구현을 사용하지만 대신 추상화를 사용해야합니다).

나는 적어도 당신의 DbContext를 인터페이스로 감싸서 당신이 그것을 조롱하거나 더 좋은 방법으로 스텁 (stub) 할 수있게 할 것을 권한다.

public interface IDbContext {
      IDbSet<Customer> Customers { get; set; }
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.