2012-04-26 7 views
1

제목을 붙입니다.유닛 테스트를 작성하여 인터페이스를 구현하는지 확인하는 것이 의미가 있습니까?

나는 정렬이 필요한 IComparable을 구현하는 클래스가 있습니다. 모든 방법에 대해 모든 단위 테스트를 작성했습니다. 하지만 IComparable을 구현하는지 확인하기 위해 단위 테스트를 작성하는 것이 합리적입니까?

UI로 정렬 할 때 인터페이스가 작동하지 않기 때문에. 그러나 컴파일은 여전히 ​​작동 할 것입니다. 그래서 만약 내가 그러한 테스트 케이스를 가지고 있다면, 누군가 그 인터페이스를 제거했는지 알 수 있습니다. .... 나는이 속성을 사용하는 방법이 (또는 그게 말할해야

public class ComparableCustomType: IComparable 
    { 
     private readonly someFields; 

     public ComparableCustomType(AnotherBusinessObject obj) 
     { 
       //Do some parsing against the obj 
     } 

     public int CompareTo(object obj) 
     { 
      //Some custom sorting logic 
     } 
    } 

는 기본적으로 내 테스트 케이스가 될 것입니다 :

[TestMethod] 
public void CompareTo_IsImplementIComaparable() 
{ 
     IComparable comparable = Isolate.Fake.Instance<ComparableCustomType>(); 
     Assert.AreNotEqual(null, comparable);  
} 

편집

내 클래스는 뭔가처럼 사람이이 속성을 사용하는 방법 ...)

public class CustomItem{ 

    private AnotherBusinessObject anotherBusinessObj = null 

    public CustomItem(AnotherBusinessObject obj) 
    { 
     this.anotherBusinessObj = obj; 
    } 

    public ComparableCustomType { 
     get { return new CamparableCustomType(this.anotherBusinessObj); } 
    } 

    public string SomeOtherProperty {get;set;} 

    publci int AnotherProperty {get;set;} 

} 

public ObservableCollection<CustomItem> MyCustomCollection {get;set;} 

그러면이 컬렉션은 내 GridView ....에 데이터 바인딩됩니다. 그러면 automa가됩니다. tically 모든 열을 생성 .....

+0

이제 응용 프로그램에서 객체를 인스턴스화하고 사용하는 방법은 무엇입니까? 그게 제가 주로 궁금해 한 것입니다. – jlafay

+0

@jlafay이 컬렉션 항목의 속성으로 사용됩니다. 간단한 코드를 넣어 보겠습니다 ... –

답변

5

내 대답을 신속하게 요약하기 위해 클래스 테스트를 구현하는 단위 테스트를 작성하는 것은별로 중요하지 않습니다. IMO, 단위 테스트는 유형이 아닌 논리/기능을 테스트하도록 작성되어야합니다. 이것은 생성자를 인스턴스화 할 수 있는지 테스트를 작성하는 것과 같습니다. 보통 그런 것은 너무 잔인하고 나는이 경우가 잔인하다고 생각합니다.

코드를 컴파일 할 때 확인해야합니다. 오브젝트가 인스턴스화 될 때이 제한 조건을 적용 할 수 있습니다 (오브젝트를 사용하는 방법이 가능할 경우).

의이 IComparable를 구현하는 클래스가 FooComparable라고 가정 해 봅시다 :

IComparable foo = new FooComparable(); 

마찬가지로, 이미 객체를 인스턴스화 한 경우 그것은 유일한 기능은 반드시 당신이 몇 가지 다른 제약 조건을 적용 할 수있는 IComparable 개체가 아닙니다이다 .

IComparable dataSource = fooObj; 

이 시도하고 FooComparable가에서 IComparable을 컴파일러는 것입니다 구현하지 않는 경우의 당신이 당신의 FooComparable이 있고,이 같은 뭔가를 할 수는 컨트롤에 바인딩하기 전에 IComparable있어 있는지 확인하려면 아마 가정 해 봅시다 불평. 클래스를 사용하는 방법에 대한 코드 예제를 제공하여 더 많은 제안을 제공 할 수 있습니다.

+0

클래스에는 기본적으로 정렬에 사용할 수있는 방식으로 데이터를 구문 분석 할 생성자가 있습니다. IComparable은 GridView/DataGrid가이 사용자 지정 형식이 정렬 될 수 있음을 알기위한 것입니다. 따라서 열에 대한 정렬이 가능합니다. –

+0

방금 ​​샘플 코드를 추가했습니다. –

4

나는 컴파일러가 당신을 잡으려고 아무것도 테스트하지 말 것입니다. 컴파일러가 알아 듣지 못할 사건이 있으므로 UT를 만드는 것이 합법적 인 것처럼 보입니다.

+0

단위 테스트에서 어떤 규칙도 위반하지 않습니까? 나는 단위 테스트에 익숙하지 않다. 내가 아는 전부는 다른 매개 변수를 다른 메서드에 전달하여 개체의 동작을 알고 싶습니다 ... –

+0

그것은 어떤 규칙에도 위배되지 않습니다. 단위 테스트와 관련된 지침은 일반적으로 상위 경계를 정의하며 (한 번에 한 클래스를 테스트하고 다른 클래스를 조롱하는 등) 컴파일러는 자연스러운 하위 경계를 만듭니다.그러나 jlafay의 대답을보십시오 - 그의 대답이 C#에 맞다면, 즉 컴파일러가 정확성을 적용하도록 할 수 있다면 그렇게하십시오. –

관련 문제