Статьи

Краткий обзор утверждений Java

Во-первых, что утверждает? Утверждение — это предикат (утверждение «истина-ложь»), помещенный в программу, чтобы указать, что разработчик считает, что предикат всегда верен в этом месте. [Википедия]

Традиционные утверждения

Традиционные рамки тестирования начинались со встроенного ключевого слова assert .

Пример ключевого слова assert :

assert <condition> value

У Assert есть несколько недостатков, включая остановку выполнения теста, а также длинные и трудные для описания утверждения assert.

Утверждения второго поколения

Наряду с этим утверждают рамки JUnit. Построенный на основе ключевого слова assert , JUnit предоставил разработчикам возможность более подробно описывать утверждения тестирования.

Пример утверждений JUnit:

    // asserts that the condition must be true  
    assertTrue("This should be true", "abc".equalsIgnoreCase("ABC"));  
    // asserts that the object must not be null  
    assertNotNull(new MyObject());  
    //...  
    assertFalse(false == true);  
    //  
    assertNull(null);  
    // etc...  

Хотя есть некоторые улучшения по читаемости и практичности к основному утверждают , ключевое слово предоставляемых JUnit, они разделяют некоторые из тех же недостатков , в том , что многие разработчики просто использовать « assertTrue () », « assertEquals () » и « assertFalse () » методы по-прежнему обеспечивает очень загадочное утверждение утверждения.

Утверждения третьего поколения

В попытке направить разработчиков на написание тестовых утверждений, которые были бы более удобочитаемыми и пригодными для использования, была создана библиотека Hamcrest, которая переключила философию со многих функций утверждения на одну базовую функцию. Основная мысль заключается в том, что утверждение такое же, но условия изменятся. Hamcrest был построен с использованием концепций BDD (дизайн, основанный на поведении), где утверждение теста ближе к предложению.

Пример утверждений подколенного сухожилия:

    @Test  
    public void showoffSomeHamcrestAssertsAndMatchers() {  
        // asserts that string "abc" is "ABC" ignoring case  
        assertThat("abc", is(equalToIgnoringCase("ABC")));  
        assertThat(myObject.getFirst(), is("Mike!"));  
        assertThat(myObject.getAddress(), is(notNullValue));  
    }  

Hamcrest — это отличное усовершенствование платформы JUnit, обеспечивающее гибкую и удобочитаемую платформу для тестирования. Hamcrest + JUnit — это комплексная среда тестирования, которая в сочетании с Mockito (или другой системой моделирования ) может обеспечить очень наглядное и полное решение для модульного тестирования. Один из недостатков использования Hamcrest заключается в том, что, хотя он описательный, необходимо сделать несколько утверждений, чтобы обеспечить охват тестового примера. Многие чистые TDD согласны, что контрольный пример должен содержать одно-единственное утверждение, но как это возможно для сложного объекта? (Чистейший скажет рефакторинг, но часто это неосуществимо)

Фреймворки четвертого поколения

И, наконец, мы подошли к настоящему с новейшими структурами утверждений. Фреймворк Fest Assertion начинает работать там, где Hamcrest прекратил предоставлять фреймворк свободного стиля, предоставляющий разработчику возможность тестировать объекты с помощью одного утверждения.

Пример утверждений Феста:

    @Test  
    public void getAddressOnStreet() {  
        List<Address> addresses = addressDAO.liveOnStreet("main");  
        assertThat(addresses).hasSize(10).contains(address1, address2);  
        assertThat(stringObj).hasSize(7).isEqualToIgnoringCase("abcdefg");  
    }  

Как видите, исключения FEST обеспечивают более четкий подход к утверждениям. FEST очень расширяемый и простой в использовании.

Вывод

Утверждения являются ключевым инструментом в наборе инструментов профессионального разработчика, в котором стресс-тестирование их кода. Этот пост является частью серии, кульминацией которой является свободный стиль механизма ExpectedException, поддерживаемый Fest, в котором для большей ясности в ваших тестовых случаях, когда вводятся исключения. Не стесняйтесь читать руководство до этого поста; Разрешение известным ошибочным тестам JUnit проходить тестовые случаи .

ПРИМЕЧАНИЕ. В этом блоге представлен обзор платформ утверждений. Следует отметить, что существуют различные другие среды тестирования второго и третьего поколений, которые стремятся обеспечить лучшую ясность и удобство использования для тестирования, в том числе такие известные, как TestNG и JTest .