코드 냄새 52 - 깨지기 쉬운 테스트

테스트는 우리의 안전망입니다. 그들의 정직함을 신뢰하지 않는다면 우리는 큰 위험에 처하게 될 것입니다.

요약: 비결정적 테스트를 작성하지 마세요.

문제


  • 결정론
  • 자신감 상실
  • 시간낭비

  • 솔루션


  • 테스트를 완전히 제어해야 합니다. 불규칙한 동작과 자유도를 위한 공간이 없어야 합니다.
  • 모든 테스트 커플링을 제거합니다.







  • 깨지기 쉽고, 간헐적이며, 산발적이거나 불규칙한 테스트는 많은 조직에서 일반적입니다.

  • 그럼에도 불구하고 그들은 개발자의 신뢰를 얻습니다.

    우리는 그것들을 피해야 합니다.

    샘플 코드


    잘못된



    import static org.junit.Assert.assertEquals;
    
    import org.junit.Test;
    
    import components.set.Set;
    import components.set.Set1L;
    
    public abstract class SetTest {
    
        protected abstract Set<String> constructor();
    
        @Test
        public final void testAddEmpty() {
            Set<String> s = this.constructor();
            s.add("green");
            s.add("blue");
            assertEquals("{green. blue}", s.toString());
           //This is fragile since it dependes on set sort (which is not defined)
        }   
    }
    

    오른쪽



    import static org.junit.Assert.assertEquals;
    
    import org.junit.Test;
    
    import components.set.Set;
    import components.set.Set1L;
    
    public abstract class SetTest {
    
        protected abstract Set<String> constructor();
    
        @Test
        public final void testAddEmpty() {
            Set<String> s = this.constructor();
            s.add("green");
            assertEquals("{green}", s.toString());
        }   
    
        @Test
        public final void testEntryAtSingleEntry() {
            Set<String> s = this.createFromArgs("red");
            Boolean x = s.contains("red");
            assertEquals(true, x);
        } 
    }
    

    발각



    테스트 실행 통계를 통해 감지할 수 있습니다.

    우리가 안전망을 제거하고 있기 때문에 유지 관리에 약간의 테스트를 하는 것은 매우 어렵습니다.

    더 많은 정보



    %[ https://softwareengineering.stackexchange.com/questions/109703/how-to-avoid-fragile-unit-tests ]

    처지






    태그


  • 커플링
  • 결정론

  • 결론



    깨지기 쉬운 테스트는 시스템 결합을 보여주며 결정론적이거나 불규칙한 동작이 아닙니다.

    개발자는 이러한 오탐지와 싸우기 위해 많은 시간과 노력을 기울입니다.

    학점



    사진 제공: Jilbert Ebrahimi on Unsplash


    The amateur software engineer is always in search of magic.



    그래디 부치






    이 기사는 CodeSmell 시리즈의 일부입니다.




    마지막 업데이트: 2021/06/12

    좋은 웹페이지 즐겨찾기