2012-11-27 3 views
4

나는 여러 사람이 작업하는 프로젝트가 있습니다. 나는 우리 프로젝트를 위해 단위 테스트를 구축 해왔다. (나는 이것들이 1 일째부터 있었음에 틀림 없다. 그러나 프로젝트가 시작된 이후에 합류했다.)단위 테스트 모델 - 조언

우리는 많은 속성들을 가진 많은 모델들을 가지고있다. 이 모델을 테스트하기위한 단위 테스트를 만들고 올바르게 인스턴스화하고 속성을 설정하도록 조언한다면 궁금합니다.

+0

필자는 getters/setters에 사용자 지정 논리가 포함 된 속성 만 테스트 할 것입니다. 사소한 속성 (예 :'{get; set;}')의 경우 유닛 테스트에서 사용하지 않습니다. – GolfWolf

+0

속성 ([This (http://stackoverflow.com/questions/593879/unittest-properties-in-net) 링크에는 많은 답변이 있음)을 테스트하고 있는지, 아니면 인스턴스화 후 특성 값. 어느 쪽이든, 당신은 그들을 테스트해야합니다. – SwDevMan81

답변

1

나는 ORM 프레임 워크에서 올바르게로드되었는지 테스트하지 않을 것입니다. 그러나 예를 들어 논리가있는 경우 테스트를 추가 할 수 있습니다. 예 :

private IList<User> _allUsers; 

public IEnumerable<User> GetActiveUser 
{ 
    get { return _allUsers.Where(u => u.IsActive); 
} 

활성 사용자 만 활성화되는지 확인하려면 테스트가 필요할 수 있습니다.

1

모델이 사용중인 프레임 워크 또는 데이터 액세스 계층과 모델 자체에 구축 된 비즈니스 논리에 의해 올바르게 유지되는지 테스트하십시오.

필자는 NUnit + Fluent Assertions를 사용하여 지속성 작업 전후의 모델을 비교 (예 : 모델 생성 및 저장, 모든 값을 올바르게 검색하는지 확인)하고 싶습니다.

엄격하게 지속성을 가질 필요는 없습니다. 아마도 귀하의 모델은 뷰 모델이며 매퍼 (mapper)에 의해 비즈니스 엔티티에서 매핑됩니다. 나도 그걸 시험해 볼거야. 기본적으로 모델은 모델이나 모델을 테스트하지 않고 일부 레이어 나 로직을 통해 올바르게 전환되는지 테스트하려고합니다 (물론 모든 비즈니스 로직을 제외하고). 테스트 언어 또는 프레임 워크 기능/컴파일러가 작동하고있는 것처럼 속성이 작동하는지 테스트하는 것은 시간 낭비입니다.

원유 예 : 당신은 논리가 아니라 데이터에 집중해야

// arrange 
    var expected = new PersonModel 
        { 
        FirstName = "John", 
        LastName = "Doe", 
        DateOfBirth = DateTime.Now 
        // etc 
        } 

    // act 
    var id = InsertModelAndReturnId(expected); 
    var actual = RetrieveModelById(id); 

    // assert 
    actual.ShouldHave().AllProperties().EqualTo(expected); // ShouldHave is from Fluent Assertions. This line makes sure expected and actual have the same values after being persisted and retrieved 
0

대부분의 경우. 즉, 상태 인을 테스트하면 안되므로 동작을 테스트해야합니다.

속성 뒤에 약간의 동작이있을 수 있습니다. 예를 들어, 한 속성의 상태를 변경하면 다른 속성의 값에 영향을 주어야합니다 (이 경우에는 동작을 테스트하고 상태는 테스트하지 않습니다).

모든 단위 테스트는 테스트중인 클래스 (c)에 대한 이야기를 말해야합니다. 너무 많은 쓸모없는 단위 테스트는 시스템에 대한 관련 정보 나 중요한 정보를 숨기고 실제로 유지 관리 가능성을 높이지 않고 줄입니다.

실용적이고 시스템의 가장 중요한 부분에 테스트를 추가하고 가장 복잡한 비즈니스 로직을 먼저 처리하면 시스템의 다른 부분으로 이동합니다.