Модуларно тестирање

тестирање појединачних јединица изворног кода у програмирању

У програмирању, модуларно тестирање (енгл. Unit testing) је метода тестирања софтвера којом се појединачне јединице изворног кода, скупови једног или више модула рачунарског програма са припадајућим контролним подацима, поступцима употребе и оперативним процедурама, тестирају како би се утврдило да ли су погодне за употребу.[1]

Опис

уреди

Јединствени тестови су обично аутоматизовани тестови које програмери софтвера пишу и изводе како би осигурали да део апликације (познат као „јединица”) испуњава задати дизајн и понаша се како је предвиђено.[2] У процедуралном програмирању јединица може бити читав модул, али је то чешће појединачна функција или поступак. У објектно оријентисаном програмирању јединица је често читав интерфејс, попут класе, али може бити и појединачна метода.[3] Ако се најпре напишу тестови за најмање јединице, а затим сложена понашања између њих, можете изградити свеобухватне тестове за сложене примене.

Пример

уреди

Ово су тестни случајеви у Јави који специфицирају бројне елементе имплементације. Прво, мора постојати интерфејс који се зове Adder и класа имплементације са конструктором који се зове AdderImpl. Даље, Adder интерфејс треба да има методу која се зове add, са два параметра који су цели бројеви, са повратном вредношћу која је такође цели број. Такође одређује понашање ове методе за мали распон вредности у току бројних метода испитивања.

import static org.junit.Assert.*;

import org.junit.Test;

public class TestAdder {

  @Test
  public void testSumPositiveNumbersOneAndOne() {
    Adder adder = new AdderImpl();
    assert(adder.add(1, 1) == 2);
  }

  // да ли може сабрати два позитивна броја: 1 и 2?
  @Test
  public void testSumPositiveNumbersOneAndTwo() {
    Adder adder = new AdderImpl();
    assert(adder.add(1, 2) == 3);
  }

  // да ли може сабрати два позитивна броја: 2 и 2?
  @Test
  public void testSumPositiveNumbersTwoAndTwo() {
    Adder adder = new AdderImpl();
    assert(adder.add(2, 2) == 4);
  }

  // да ли је нула неутрална?
  @Test
  public void testSumZeroNeutral() {
    Adder adder = new AdderImpl();
    assert(adder.add(0, 0) == 0);
  }

  // да ли може сабрати два негативна броја: -1 и -2?
  @Test
  public void testSumNegativeNumbers() {
    Adder adder = new AdderImpl();
    assert(adder.add(-1, -2) == -3);
  }

  // да ли може сабрати позитиван и негативан број?
  @Test
  public void testSumPositiveAndNegative() {
    Adder adder = new AdderImpl();
    assert(adder.add(-1, 1) == 0);
  }

  // шта се дешава са великим бројевима?
  @Test
  public void testSumLargeNumbers() {
    Adder adder = new AdderImpl();
    assert(adder.add(1234, 988) == 2222);
  }

}

У овом случају, модуларни тестови, први написани, делују као дизајнерски документ у којем се наводе облици и понашање жељеног решења, али не и детаљи имплементације који су остављени програмеру. Пратећи праксу „уради најједноставнију ствар која би могла да функционише“, испод је приказано најлакше решење које ће проћи пробни тест.

interface Adder {
  int add(int a, int b);
}
class AdderImpl implements Adder {
  public int add(int a, int b) {
    return a + b;
  }
}

Референце

уреди
  1. ^ Kolawa, Adam; Huizinga, Dorota (2007). Automated Defect Prevention: Best Practices in Software Management. Wiley-IEEE Computer Society Press. стр. 75. ISBN 978-0-470-04212-0. 
  2. ^ Hamill, Paul (2004). Unit Test Frameworks: Tools for High-Quality Software Development (на језику: енглески). "O'Reilly Media, Inc.". ISBN 9780596552817. Приступљено 3. 6. 2019. 
  3. ^ Xie, Tao. „Towards a Framework for Differential Unit Testing of Object-Oriented Programs” (PDF). Архивирано из оригинала (PDF) 23. 07. 2012. г. Приступљено 23. 7. 2012. 

Спољашње везе

уреди