Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
PL/SQL Unit Testing   Can Be Fun!     with a little help        from Ruby
Raimonds Simanovskis                       github.com/rsim                  @rsim           .com
What is good  code?                   Test  Correct               functionality!                   TestFast enough        ...
How is it done?        try something...    dbms_output.put_line(...) it is obvious that there are no bugstesters should te...
What are typical       problems?        Trying and not testing       Tests are not repeatable     Manual verification of r...
Types of tests         unit tests      integration tests                                programmer’s    performance & load...
Test Driven Development
Good unit tests           Automatic, run fastWide code coverage including edge cases              Repeatable   Independent...
How to do it when programming in    PL/SQL?
created by Steven Feuerstein, 1999based on “xUnit”-style frameworks    not maintained anymore :(
Example    substring from start until end positionCREATE OR REPLACE FUNCTION betwnstr (   string_in   IN   VARCHAR2,   sta...
TestsCREATE OR REPLACE PACKAGE ut_betwnstr AS   CREATE OR REPLACE PACKAGE BODY ut_betwnstr AS  PROCEDURE ut_setup;        ...
Results                 exec utplsql.test(betwnstr, recompile_in => FALSE);.>        SSSS      U         U     CCC        ...
Visual testing toolsQuest Code Tester   SQL Developer >= 2.1
Why used just by few? Too large / too verbose test code?   Hard to read, too much noise?    Hard to test complex cases?No ...
ruby-plsql-spec                ideal language                for writing tests             powerful testing tools RSpec   ...
Demo
ruby-plsql gemplsql.connect! "hr","hr","xe"plsql.test_uppercase(xxx)              # => "XXX"plsql.test_uppercase(:p_string...
Benefits      Compact, readable syntaxPowerful features also for complex tests Best practices from Ruby community  Based o...
More information http://blog.rayapps.com/2009/11/27/oracle-plsql-                unit-testing-with-ruby/http://blog.rayapp...
Nächste SlideShare
Wird geladen in …5
×

PL/SQL Unit Testing Can Be Fun

Presentation at Miracle Open World 2012

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

PL/SQL Unit Testing Can Be Fun

  1. 1. PL/SQL Unit Testing Can Be Fun! with a little help from Ruby
  2. 2. Raimonds Simanovskis github.com/rsim @rsim .com
  3. 3. What is good code? Test Correct functionality! TestFast enough performance! Test afterMaintainable changes!
  4. 4. How is it done? try something... dbms_output.put_line(...) it is obvious that there are no bugstesters should test, that’s their job
  5. 5. What are typical problems? Trying and not testing Tests are not repeatable Manual verification of resultsTesting is done too late in development
  6. 6. Types of tests unit tests integration tests programmer’s performance & load responsibility testsexploratory & usability tests
  7. 7. Test Driven Development
  8. 8. Good unit tests Automatic, run fastWide code coverage including edge cases Repeatable Independent from execution order Using real and understandable test data
  9. 9. How to do it when programming in PL/SQL?
  10. 10. created by Steven Feuerstein, 1999based on “xUnit”-style frameworks not maintained anymore :(
  11. 11. Example substring from start until end positionCREATE OR REPLACE FUNCTION betwnstr ( string_in IN VARCHAR2, start_in IN INTEGER, end_in IN INTEGER) RETURN VARCHAR2IS l_start PLS_INTEGER := start_in;BEGIN IF l_start = 0 THEN l_start := 1; END IF; RETURN (SUBSTR (string_in, l_start, end_in - l_start + 1));END;
  12. 12. TestsCREATE OR REPLACE PACKAGE ut_betwnstr AS CREATE OR REPLACE PACKAGE BODY ut_betwnstr AS PROCEDURE ut_setup; PROCEDURE ut_setup AS PROCEDURE ut_teardown; BEGIN NULL; PROCEDURE ut_normal_usage; END ut_setup; PROCEDURE ut_first_index_null; PROCEDURE ut_teardown ASEND ut_betwnstr; BEGIN NULL; END ut_teardown; PROCEDURE ut_normal_usage AS BEGIN utassert.eq(Normal usage, betwnstr(abcdefg, 2, 5), bcde); END ut_normal_usage; PROCEDURE ut_first_index_null AS BEGIN utassert.isnull(First index is null, betwnstr(abcdefg, NULL, 5)); END ut_first_index_null; END ut_betwnstr;
  13. 13. Results exec utplsql.test(betwnstr, recompile_in => FALSE);.> SSSS U U CCC CCC EEEEEEE SSSS SSSS> S S U U C C C C E S S S S> S U U C C C C E S S> S U U C C E S S> SSSS U U C C EEEE SSSS SSSS> S U U C C E S S> S U U C C C C E S S> S S U U C C C C E S S S S> SSSS UUU CCC CCC EEEEEEE SSSS SSSS. SUCCESS: "betwnstr".> Individual Test Case Results:>SUCCESS - betwnstr.UT_FIRST_INDEX_NULL: ISNULL "First index is null" Expected "" and got "">SUCCESS - betwnstr.UT_NORMAL_USAGE: EQ "Normal usage" Expected "cde" and got "cde">>> Errors recorded in utPLSQL Error Log:>> NONE FOUND
  14. 14. Visual testing toolsQuest Code Tester SQL Developer >= 2.1
  15. 15. Why used just by few? Too large / too verbose test code? Hard to read, too much noise? Hard to test complex cases?No best practices how to write tests? Nobody is using, why should I use?
  16. 16. ruby-plsql-spec ideal language for writing tests powerful testing tools RSpec with “readable” syntax library for callingruby-plsql PL/SQL procedures from Ruby
  17. 17. Demo
  18. 18. ruby-plsql gemplsql.connect! "hr","hr","xe"plsql.test_uppercase(xxx) # => "XXX"plsql.test_uppercase(:p_string => xxx) # => "XXX"plsql.test_copy("abc", nil, nil) # => { :p_to => "abc", # :p_to_double => "abcabc" }plsql.test_copy(:p_from => "abc", :p_to => nil, :p_to_double => nil) # => { :p_to => "abc", # :p_to_double => "abcabc" }plsql.hr.test_uppercase(xxx) # => "XXX"plsql.test_package.test_uppercase(xxx) # => XXXplsql.hr.test_package.test_uppercase(xxx) # => XXXplsql.logoff
  19. 19. Benefits Compact, readable syntaxPowerful features also for complex tests Best practices from Ruby community Based on needs from real projects Open-source – “free as in beer” :)
  20. 20. More information http://blog.rayapps.com/2009/11/27/oracle-plsql- unit-testing-with-ruby/http://blog.rayapps.com/2010/01/06/screencasts-of- oracle-plsql-unit-testing-with-ruby/ http://github.com/rsim/ruby-plsql-spec

    Als Erste(r) kommentieren

    Loggen Sie sich ein, um Kommentare anzuzeigen.

  • Zver

    Apr. 20, 2012
  • amelli

    Nov. 2, 2015
  • UlrichSchulte2

    Jan. 2, 2016
  • mikelin

    Feb. 18, 2016

Presentation at Miracle Open World 2012

Aufrufe

Aufrufe insgesamt

3.614

Auf Slideshare

0

Aus Einbettungen

0

Anzahl der Einbettungen

21

Befehle

Downloads

57

Geteilt

0

Kommentare

0

Likes

4

×