SlideShare una empresa de Scribd logo
1 de 11
Niepraktycznie i nieskładnie

o Test Driven Development




   Adam Przybyła <adam@ertel.com.pl>

       (Creative Commons cc-by-nd)

  Mikstura 2 Lateral Thinking - Rybnik 2013
Cykl życia
[root@synergia TDD_ANTLR]# cat test_mikstura.py
#! /usr/bin/python
import unittest

class test_moj(unittest.TestCase):
   def test_test(self):
       self.assertTrue(False)

if __name__ == '__main__':
    unittest.main()
[root@synergia TDD_ANTLR]#
[root@synergia TDD_ANTLR]# ./test_mikstura.py
F
==================================================
====================
FAIL: test_test (__main__.test_moj)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./test_mikstura.py", line 6, in test_test
   self.assertTrue(False)
AssertionError

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)
[root@synergia TDD_ANTLR]#
[root@synergia TDD_ANTLR]# cat test_mikstura.py
#! /usr/bin/python
import unittest

class test_moj(unittest.TestCase):
   def test_test(self):
       self.assertTrue(True)

if __name__ == '__main__':
    unittest.main()
[root@synergia TDD_ANTLR]#
[root@synergia TDD_ANTLR]# ./test_mikstura.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
[root@synergia TDD_ANTLR]#
#!/usr/bin/python
import unittest
import antlr3
from CSVLexer import CSVLexer
from CSVParser import CSVParser
class test_csv(unittest.TestCase):
     def setUp(self):
           pass

    def test_test(self):
         self.assertTrue(True)

    def test_lf(self):
         parser=parserek("n")
         wynik=parser.line()
         self.assertFalse(wynik)

    def test_crlf(self):
         parser=parserek("rn")
         wynik=parser.line()
         self.assertFalse(wynik)

    #@unittest.skip("omijam test")
    def test_red(self):
         parser=parserek("red")
         wynik=parser.pole()
         self.assertEqual(wynik,"red")
grammar CSV;
Options { language=Python; }
@header {
def test1(s): print "test"
}
line returns [wynik]
scope { wynik2 }
@init { wynik =[]; $line::wynik2=[]; }
: ( (NEWLINE) => NEWLINE
 | ( p1=pole {wynik.append(p1) } ( COMMA p1=pole {wynik.append(p1) } )* NEWLINE ) )
{ wynik=$line::wynik2};

COMMA : ( ' '* ',' ' '*) ;

pole returns [wynik1]
@init {
wynik1=""
try:
   wyn=$line::wynik2
except IndexError:
   wyn=[]
}
     : ( p=ZNAWIASEM { wynik1 = $p.text;}
     | p=BEZNAWIASU { wynik1 = $p.text;}
     | //nic
     ) {wyn.append(wynik1)};
NEWLINE : 'r'? 'n';

ZNAWIASEM : ('"' ( options {greedy=false;}: . )+ '"')+
   {txt = self.getText().strip('"').replace('""','"');self.setText(txt)};

BEZNAWIASU          : ~('r' | 'n' | ',' | ' ' | '"')+;
#! /usr/bin/python
# -*- coding: UTF-8 -*-
import unittest
from analizator import *
from pobieracz import *
from TDDczysciciel import Lexer
import pobieracz,analizator,warstwa_leksykalna,codecs,TDDczysciciel
class testy_pobierania(unittest.TestCase):
      def setUp(self):
           pass

    def test_dziala(self):
         self.assertTrue(True)

    def test_nazwy(self):
         self.assertTrue(nazwa_ma_ip("dns.ertel.com.pl"))

    def test_zlej_nazwy(self):
         self.assertFalse(nazwa_ma_ip("dns-45.ertel.com.pl"))

    def test_pinga_dziala(self):
         self.assertTrue(nazwa_odp_na_ping('127.0.0.1'))

    def test_pinga_niedziala(self):
         self.assertFalse(nazwa_odp_na_ping('224.0.0.0'))
Lateral Thinking


●   Wikinomia
●   Wikipedia
●   Wolna kultura
●   Falsyfikacja jako metoda naukowa i metoda testów
Pytania/pomysły?

Más contenido relacionado

La actualidad más candente

Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17Sergey Platonov
 
The Flavor of TypeScript
The Flavor of TypeScriptThe Flavor of TypeScript
The Flavor of TypeScriptDmitry Sheiko
 
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеТененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеPlatonov Sergey
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3Platonov Sergey
 
Rambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тестыRambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тестыRAMBLER&Co
 
BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!Toshio Ehara
 
Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++corehard_by
 
数式を構文解析した話
数式を構文解析した話数式を構文解析した話
数式を構文解析した話y1r96 Ueno
 
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsHo Kim
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhacomakoto tsuyuki
 
Propuesta..sujei
Propuesta..sujeiPropuesta..sujei
Propuesta..sujeigersonjack
 
JavaScript Assíncrono
JavaScript AssíncronoJavaScript Assíncrono
JavaScript AssíncronoNatã Barbosa
 
Understanding Python decorators
Understanding Python decoratorsUnderstanding Python decorators
Understanding Python decoratorsJosipKatalinic
 

La actualidad más candente (19)

Dij
DijDij
Dij
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
 
The Flavor of TypeScript
The Flavor of TypeScriptThe Flavor of TypeScript
The Flavor of TypeScript
 
08 1 함수란
08 1 함수란08 1 함수란
08 1 함수란
 
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговлеТененёв Анатолий, Boost.Asio в алгоритмической торговле
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3
 
Menu orastat.c
Menu orastat.cMenu orastat.c
Menu orastat.c
 
Osmose
OsmoseOsmose
Osmose
 
Rambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тестыRambler.iOS #8: Чистые unit-тесты
Rambler.iOS #8: Чистые unit-тесты
 
Suma de n numeros
Suma de n numerosSuma de n numeros
Suma de n numeros
 
BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!
 
Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++
 
数式を構文解析した話
数式を構文解析した話数式を構文解析した話
数式を構文解析した話
 
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
 
JavaScript Tips
JavaScript TipsJavaScript Tips
JavaScript Tips
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco
 
Propuesta..sujei
Propuesta..sujeiPropuesta..sujei
Propuesta..sujei
 
JavaScript Assíncrono
JavaScript AssíncronoJavaScript Assíncrono
JavaScript Assíncrono
 
Understanding Python decorators
Understanding Python decoratorsUnderstanding Python decorators
Understanding Python decorators
 

Más de Adam Przybyła

NocInformatyka2022.pdf
NocInformatyka2022.pdfNocInformatyka2022.pdf
NocInformatyka2022.pdfAdam Przybyła
 
Mission ImpAnsible - NSM at (RobotFrame)work
Mission ImpAnsible - NSM at (RobotFrame)work Mission ImpAnsible - NSM at (RobotFrame)work
Mission ImpAnsible - NSM at (RobotFrame)work Adam Przybyła
 
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...Adam Przybyła
 
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...Adam Przybyła
 
SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013Adam Przybyła
 
Humanista w twoim linuksie
Humanista w twoim linuksieHumanista w twoim linuksie
Humanista w twoim linuksieAdam Przybyła
 
Open Source i nowe technologie, czyli trochę o systemach o dużej niezawodności
Open Source i nowe technologie, czyli trochę o systemach  o dużej niezawodnościOpen Source i nowe technologie, czyli trochę o systemach  o dużej niezawodności
Open Source i nowe technologie, czyli trochę o systemach o dużej niezawodnościAdam Przybyła
 

Más de Adam Przybyła (7)

NocInformatyka2022.pdf
NocInformatyka2022.pdfNocInformatyka2022.pdf
NocInformatyka2022.pdf
 
Mission ImpAnsible - NSM at (RobotFrame)work
Mission ImpAnsible - NSM at (RobotFrame)work Mission ImpAnsible - NSM at (RobotFrame)work
Mission ImpAnsible - NSM at (RobotFrame)work
 
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
 
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...Aby wąż giętki robił to co wymyśli głowa,  czyli słów kilka o analizie leksyk...
Aby wąż giętki robił to co wymyśli głowa, czyli słów kilka o analizie leksyk...
 
SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013SELinux, czyli zero-zero-day exploits - DWO 2013
SELinux, czyli zero-zero-day exploits - DWO 2013
 
Humanista w twoim linuksie
Humanista w twoim linuksieHumanista w twoim linuksie
Humanista w twoim linuksie
 
Open Source i nowe technologie, czyli trochę o systemach o dużej niezawodności
Open Source i nowe technologie, czyli trochę o systemach  o dużej niezawodnościOpen Source i nowe technologie, czyli trochę o systemach  o dużej niezawodności
Open Source i nowe technologie, czyli trochę o systemach o dużej niezawodności
 

Mikstura it2013

  • 1. Niepraktycznie i nieskładnie o Test Driven Development Adam Przybyła <adam@ertel.com.pl> (Creative Commons cc-by-nd) Mikstura 2 Lateral Thinking - Rybnik 2013
  • 3. [root@synergia TDD_ANTLR]# cat test_mikstura.py #! /usr/bin/python import unittest class test_moj(unittest.TestCase): def test_test(self): self.assertTrue(False) if __name__ == '__main__': unittest.main() [root@synergia TDD_ANTLR]#
  • 4. [root@synergia TDD_ANTLR]# ./test_mikstura.py F ================================================== ==================== FAIL: test_test (__main__.test_moj) ---------------------------------------------------------------------- Traceback (most recent call last): File "./test_mikstura.py", line 6, in test_test self.assertTrue(False) AssertionError ---------------------------------------------------------------------- Ran 1 test in 0.000s FAILED (failures=1) [root@synergia TDD_ANTLR]#
  • 5. [root@synergia TDD_ANTLR]# cat test_mikstura.py #! /usr/bin/python import unittest class test_moj(unittest.TestCase): def test_test(self): self.assertTrue(True) if __name__ == '__main__': unittest.main() [root@synergia TDD_ANTLR]#
  • 7. #!/usr/bin/python import unittest import antlr3 from CSVLexer import CSVLexer from CSVParser import CSVParser class test_csv(unittest.TestCase): def setUp(self): pass def test_test(self): self.assertTrue(True) def test_lf(self): parser=parserek("n") wynik=parser.line() self.assertFalse(wynik) def test_crlf(self): parser=parserek("rn") wynik=parser.line() self.assertFalse(wynik) #@unittest.skip("omijam test") def test_red(self): parser=parserek("red") wynik=parser.pole() self.assertEqual(wynik,"red")
  • 8. grammar CSV; Options { language=Python; } @header { def test1(s): print "test" } line returns [wynik] scope { wynik2 } @init { wynik =[]; $line::wynik2=[]; } : ( (NEWLINE) => NEWLINE | ( p1=pole {wynik.append(p1) } ( COMMA p1=pole {wynik.append(p1) } )* NEWLINE ) ) { wynik=$line::wynik2}; COMMA : ( ' '* ',' ' '*) ; pole returns [wynik1] @init { wynik1="" try: wyn=$line::wynik2 except IndexError: wyn=[] } : ( p=ZNAWIASEM { wynik1 = $p.text;} | p=BEZNAWIASU { wynik1 = $p.text;} | //nic ) {wyn.append(wynik1)}; NEWLINE : 'r'? 'n'; ZNAWIASEM : ('"' ( options {greedy=false;}: . )+ '"')+ {txt = self.getText().strip('"').replace('""','"');self.setText(txt)}; BEZNAWIASU : ~('r' | 'n' | ',' | ' ' | '"')+;
  • 9. #! /usr/bin/python # -*- coding: UTF-8 -*- import unittest from analizator import * from pobieracz import * from TDDczysciciel import Lexer import pobieracz,analizator,warstwa_leksykalna,codecs,TDDczysciciel class testy_pobierania(unittest.TestCase): def setUp(self): pass def test_dziala(self): self.assertTrue(True) def test_nazwy(self): self.assertTrue(nazwa_ma_ip("dns.ertel.com.pl")) def test_zlej_nazwy(self): self.assertFalse(nazwa_ma_ip("dns-45.ertel.com.pl")) def test_pinga_dziala(self): self.assertTrue(nazwa_odp_na_ping('127.0.0.1')) def test_pinga_niedziala(self): self.assertFalse(nazwa_odp_na_ping('224.0.0.0'))
  • 10. Lateral Thinking ● Wikinomia ● Wikipedia ● Wolna kultura ● Falsyfikacja jako metoda naukowa i metoda testów