Testing Framework for PL/SQL
utPLSQL version 3 is a complete rewrite of utPLSQL v2 from scratch. Version 2 still supports older versions of Oracle that are no longer available. The community that had developed on GitHub decided that a new internal architecture was needed, from that version 3 was born.
utPLSQL is a Unit Testing framework for Oracle PL/SQL and SQL. The framework follows industry standards and best patterns of modern Unit Testing frameworks like JUnit and RSpec
Requirements:
Published releases are available for download on the utPLSQL GitHub Releases Page.
Full documentation of the project is automatically published on utPLSQL github pages
To install the utPLSQL into a new database schema and grant it to public, execute the script install_headless.sql
.
This will create a new user UT3
, grant all required privileges to that user and create PUBLIC synonyms needed.
For detailed instructions on other install options see the Install Guide
To execute using development IDE (TOAD/SQLDeveloper/PLSQLDeveloper/other) use one of following commands.
begin
ut.run();
end;
/
exec ut.run();
select * from table(ut.run());
The above commands will run all the suites in the current schema and provide report to dbms_output or as a select statement.
You can use the utPLSQL command line client utPLSQL-cli to run tests without the need for Oracle Client or any IDE like SQLDeveloper/TOAD etc.
Amongst many benefits it provides ability to:
Download the latest client and are good to go. See project readme for details.
For examples of using Continuous Integration Server & SonarCloud with utPLSQL see the utPLSQL demo project.
The below test package is a fully-functional Unit Test package for testing a betwnstr
function.
The package specification is annotated with special comments.
The annotations define that a package is a unit test suite, they also allow defining a description for the suite as well as the test itself.
The package body consists of procedures containing unit test code. To validate an expectation in test, use ut.expect( actual_data ).to_( ... )
syntax.
create or replace package test_between_string as
-- %suite(Between string function)
-- %test(Returns substring from start position to end position)
procedure normal_case;
-- %test(Returns substring when start position is zero)
procedure zero_start_position;
-- %test(Returns string until end if end position is greater than string length)
procedure big_end_position;
-- %test(Returns null for null input string value)
procedure null_string;
end;
/
create or replace package body test_between_string as
procedure normal_case is
begin
ut.expect( betwnstr( '1234567', 2, 5 ) ).to_( equal('2345') );
end;
procedure zero_start_position is
begin
ut.expect( betwnstr( '1234567', 0, 5 ) ).to_( equal('12345') );
end;
procedure big_end_position is
begin
ut.expect( betwnstr( '1234567', 0, 500 ) ).to_( equal('1234567') );
end;
procedure null_string is
begin
ut.expect( betwnstr( null, 2, 5 ) ).to_( be_null );
end;
end;
/
Outputs from running the above tests
Between string function
Returns substring from start position to end position
Returns substring when start position is zero
Returns string until end if end position is greater than string length
Returns null for null input string value
Finished in .036027 seconds
4 tests, 0 failures
We welcome new developers to join our community and contribute to the utPLSQL project. If you are interested in helping please read our guide to contributing The best place to start is to read the documentation and get familiar with the existing code base. A slack chat is the place to go if you want to talk with team members. To sign up to the chat use this link.
Project Directories
If you have a great feature in mind, that you would like to see in utPLSQL v3 please create an issue on GitHub or discuss it with us in the slack chat rooms. Use invite link to join the chat.
Version 2 to Version 3 Comparison
The utPLSQL project is community-driven and is not commercially motivated. Nonetheless, donations and other contributions are always welcome, and are detailed below.
utPLSQL has been supported by Redgate in the form of sponsored stickers and t-shirts. Thank you for helping us spreading the word! |