unit testing abl applications -...
TRANSCRIPT
![Page 2: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/2.jpg)
http://www.consultingwerk.de/ 2
![Page 3: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/3.jpg)
Consultingwerk Ltd.
http://www.consultingwerk.de/ 3
▪ Independent IT consulting organization
▪ Focusing on OpenEdge and related technology
▪ Located in Cologne, Germany, subsidiary in UK
▪ Customers in Europe, North America, Australia and South Africa
▪ Vendor of developer tools and consulting services
▪ 28 years of Progress experience (V5 … OE11)
▪ Specialized in GUI for .NET, Angular, OO, Software Architecture,
Application Integration
![Page 4: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/4.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
4
![Page 5: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/5.jpg)
Introduction
▪ Developer of SmartComponent Library Framework for
OpenEdge Developers
▪ Source code shipped to clients, 99% ABL code
▪ Used by over 25 customers
▪ Up to weekly releases (customers usually during development on
a release not older than 3 month)
▪ Fully automated update of the framework DB at client
▪ Almost no regression bugs within last 10 years
▪ Can only keep up that base due to automation
Unit Testing ABL Applications 5
![Page 6: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/6.jpg)
From a recent real world example
▪ Windows 10 Creators Upgrate (April 2017) breaks INPUT
THROUGH statements from Progress 8.3 - OpenEdge 11.7
▪ Used in a method to verify email addresses (MX record lookup),
manual test of that functionality not likely
▪ Jenkins Job alerted us around noon after the Windows update
was applied to the build server
▪ Only two days later, discussions around the issue on
StackOverflow, Progress Communities and later in PANS
Unit Tests saved the day! As we had a fix in place already!
Unit Testing ABL Applications 6
![Page 7: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/7.jpg)
Unit Testing ABL Applications 7
![Page 8: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/8.jpg)
Unit Testing ABL Applications 8
![Page 9: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/9.jpg)
From a recent real world example
▪ A pretty simple API got broken; caused by a Windows update
▪ No matter if it’s Progress’ fault or Microsoft – it’s a 3rd party
▪ We execute our Unit Tests on OpenEdge 10.2B, 11.3, 11.6 and
11.7
▪ We execute our Unit Tests on Windows 10 and Linux (VMware)
▪ Considering to add additional Windows Versions in VM’s because
of the Easter 2017 experience
Unit Testing ABL Applications 9
![Page 10: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/10.jpg)
Introduction
▪ “In computer programming, unit testing is a software testing
method by which individual units of source code, sets of one or
more computer program modules together with associated control
data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use.”, Wikipedia
▪ A Unit should be considered the smallest testable component
▪ Unit Tests may be automated
▪ Automated Unit Tests simplify regression testing
▪ Write test once, execute for a life time
Unit Testing ABL Applications 10
![Page 11: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/11.jpg)
The test pyramid
▪ Symbolizes different kind of tests that can be used to automate
testing a (layered) application
▪ Unit Tests are relatively simple (cheap) to
program, there should be lots of them
▪ API/Service Tests are more complex to
write
▪ UI Tests are the most expensive to write
and may require humans to execute them, may require most
frequent changes as the application evolves
▪ https://martinfowler.com/bliki/TestPyramid.html
Unit Testing ABL Applications 11
![Page 12: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/12.jpg)
A customer’s testing stack for a web application
▪ Technology in use JavaScript, PASOE, Web Handlers for REST,
OERA
▪ Browser UI Tests: Selenium (https://www.seleniumhq.org/)
▪ REST API’s
– SOAP UI (https://www.soapui.org/), including load scripts
– NUnit (.NET Unit Testing) as the test manager knows this well, and C#
allows more complex test logic or sequences
▪ Backend Unit Test: ABLUnit and SmartUnit
▪ JavaScript Unit Testing: Soon to be adding JSUnit to the mixUnit Testing ABL Applications 12
![Page 13: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/13.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
13
![Page 14: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/14.jpg)
Unit Testing ABL Applications 14
![Page 15: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/15.jpg)
Unit Testing ABL Applications 15
![Page 16: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/16.jpg)
Test for a specific exception to be thrown
Unit Testing ABL Applications 16
![Page 17: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/17.jpg)
Expect a very specific error from a method
Unit Testing ABL Applications 17
** Item record not on file.
(138)
![Page 18: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/18.jpg)
Demo
▪ Execute Unit Test in ABLUnit
▪ ABL Unit Launch Configuration in PDSOE
▪ ABLUnit View / Perspective
▪ Executing a single Unit Test Method
Unit Testing ABL Applications 18
![Page 19: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/19.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
19
![Page 20: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/20.jpg)
Structure of a Unit Test
▪ (ABL) Unit Tests may be developed in procedures and in classes
▪ A Unit Test is a method or internal procedure which executes a
piece of code and asserts the result of that piece of code
▪ Unit Tests may be included in the compilation unit which is tested
▪ Unit Tests may be placed in separate class or procedure files to
keep them separated from deployed code (my preference)
▪ Unit Test classes and methods or procedures may not have
parameters
▪ Unit Test methods or procedures are annotated with @Test.
Unit Testing ABL Applications 20
![Page 21: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/21.jpg)
Test Annotations
▪ (ABL) Unit Tests are annotation driven
▪ Documented in the Progress Documentation
▪ Well hidden in the “Progress Developer Studio for OpenEdge
Help”
▪ “Annotations supported with ABLUnit”
▪ https://documentation.progress.com/output/OpenEdge117/pdfs/de
vstudio/devstudio.pdf
Unit Testing ABL Applications 21
![Page 22: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/22.jpg)
Test Annotations
Unit Testing ABL Applications 22
![Page 23: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/23.jpg)
Initialization/cleanup annotations
▪ @Before and @After methods can be used to initialize and shut
down framework components (or mocks of those) required to
execute all unit test methods/procedures in test class/procedure
▪ @Setup and @TearDown methods can be used to initialize and
cleanup for every test method in a test class
– Ensure that every test has the same starting point, e.g. loading
of data into temp-tables etc.
Unit Testing ABL Applications 23
![Page 24: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/24.jpg)
Tiny little ABLUnit bug …
▪ @Test (expected=“ExceptionType”).
▪ Don’t add a space before the period. ABLUnit will ignore the
annotation parameter then
– Logged and confirmed as a bug
Unit Testing ABL Applications 24
![Page 25: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/25.jpg)
Assert-Classes and methods
▪ Simple way to test a value received by the tested method
▪ STATIC methods
▪ A single method call that
– Tests a value
– THORW’s an error when the value does not match the
expected value
– Fire and forget
Unit Testing ABL Applications 25
![Page 26: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/26.jpg)
Assert-Classes and Methods
▪ OpenEdge.Core.Assert
▪ Consultingwerk.Assertions.*
▪ Roll your own
Consultingwerk.Assertion.Assert:EqualsCaseSensitive
(cReturnValue, “This is the expected value”) .
Unit Testing ABL Applications 26
![Page 27: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/27.jpg)
Unit Testing ABL Applications 27
![Page 28: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/28.jpg)
Unit Testing ABL Applications 28
![Page 29: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/29.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
29
![Page 30: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/30.jpg)
Unit Testing Tooling
▪ #1 tool supporting Unit Testing: Structured Error Handling
– Unit Tests rely heavily on solid error handling
– Unit Testing tool can’t trace errors not thrown far enough
▪ ABLUnit OpenEdge’s Unit Testing tool integrated into PDSOE
▪ Proprietary ABL Unit Testing tools
– ProUnit
– OEUnit
– SmartUnit (component of the SmartComponent Library)
▪ All very similar but different in detail
Unit Testing ABL Applications 30
![Page 31: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/31.jpg)
JUnit legacy
▪ NUnit, JSUnit, ABLUnit, SmartUnit, …
▪ Most unit tests follow the JUnit conventions
▪ Usage of @Test. annotations (or similar)
▪ JUnit output file de facto standard
– xml file capturing the result (success, error, messages, stack
trace) of a single test or a test suite
– Understood by a bunch of tools, including Jenkins CI
– No formal definition though
Unit Testing ABL Applications 31
![Page 32: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/32.jpg)
JUnit output file
▪ results.xml produced by ABLUnit and similar tools
▪ Visualized by ABLUnit View
▪ Visualized / trended by Jenkins CI
▪ Visualized by ANT’s JUnit task (produces html output) or similar
tools
▪ Alternatives like junit-viewer
https://www.npmjs.com/package/junit-viewer
Unit Testing ABL Applications 32
![Page 33: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/33.jpg)
ANT
▪ Apache Build Scripting Language
▪ XML based batch file, OS-independent
▪ ANT-File may contain multiple targets (sub routines)
▪ Sub routines may have dependencies to each other
▪ Macros
▪ Error-Handling & Conditional execution
▪ Properties/Variables/Parameters
Consultingwerk Toolstack 33
![Page 34: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/34.jpg)
ANT
▪ Originally a Java-Build System
▪ Compiles Java-Code, executes JUnit Tests, etc.
▪ Other built in features (among many others):
– File manipulations, copy, delete, …
– ZIP, UNZIP
– SCM Interaction
▪ https://ant.apache.org/manual/tasksoverview.html
▪ Extensible via plug-ins (offering further ANT
Tasks)
Consultingwerk Toolstack 34
![Page 35: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/35.jpg)
ANT
▪ ANT supports Unit Test execution
▪ ABLUnit Task delivered by PSC
▪ ABLUnit Task in PCT
▪ PCTRun to execute your own unit tests
▪ ANT scripts may be executed as part of a build pipeline, nightly
builds, after every source code commit
Unit Testing ABL Applications 35
![Page 36: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/36.jpg)
Unit Testing ABL Applications 36
![Page 37: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/37.jpg)
PCT
▪ https://github.com/
Riverside-Software/pct
▪ ANT tasks for OpenEdge
▪ Progress Compiler Tools
▪ open-source
▪ „Support“ via Github Issue-Tracking
Consultingwerk Toolstack 37
![Page 38: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/38.jpg)
Unit Testing ABL Applications 38
![Page 39: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/39.jpg)
Consultingwerk Toolstack 39
![Page 40: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/40.jpg)
Consultingwerk Toolstack 40
![Page 41: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/41.jpg)
Jenkins CI Server
▪ Continuous Integration – permanent merging of various changes
▪ Forked from Hudson CI
▪ Standard tool for centralized execution of build and test jobs
▪ Controlled environment for the execution of (Build or Test) „Jobs“
▪ Visualization of success or failure of jobs, visualization of Unit
Test results
▪ Emails on failure or other events
Consultingwerk Toolstack 41
![Page 42: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/42.jpg)
Jenkins CI Server
▪ Executes ANT scripts (and other scripts)
▪ Imports JUnit result files
▪ Provides trending on stability of software project
▪ Can propagate build artefacts based on test results
Unit Testing ABL Applications 42
![Page 43: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/43.jpg)
Demo
▪ Jenkins CI dash board for Unit Tests
Unit Testing ABL Applications 43
![Page 44: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/44.jpg)
Unit Testing ABL Applications 44
![Page 45: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/45.jpg)
Unit Testing ABL Applications 45
![Page 46: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/46.jpg)
Unit Testing ABL Applications 46
![Page 47: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/47.jpg)
Unit Testing ABL Applications 47
![Page 48: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/48.jpg)
Measuring your Unit Test Coverage
▪ Unit Test Coverage: % of lines of code which are executed during
unit tests
▪ There are only two kinds of people that know there Unit Test
Coverage:
– Those that don’t use Unit Tests at all
– Those that measure Unit Test Coverage using SonarSource
Unit Testing ABL Applications 48
![Page 49: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/49.jpg)
SonarSource: Code Quality measuring
Consultingwerk Toolstack 49
![Page 50: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/50.jpg)
SonarQube by SonarSource
▪ Commonly used Lint tool
▪ Support for various programming languages via plug-ins
▪ Java, JavaScript, C#, HTML, XML, CSS, …
▪ OpenEdge Plugin developed by Riverside Software (Gilles
Querret)
– engine open source
– rules commercial
▪ Available since 2016, permanently new features added
50Consultingwerk Toolstack
![Page 51: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/51.jpg)
SonarQube by SonarSource
▪ Locates problems or potential bugs
▪ Violation of coding-standards
▪ Code duplication
▪ Unit-Test coverage
▪ Web-Dashboard
▪ CLI Utility (HTML or XML Reports)
▪ Eclipse Integration
Consultingwerk Toolstack 51
![Page 52: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/52.jpg)
Demo
▪ Sonar Lint Plugin into Progress Developer Studio
Unit Testing ABL Applications 52
![Page 53: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/53.jpg)
Demo
▪ Sonar Cube web portal for Unit Tests
▪ Unit Test coverage visualization
Unit Testing ABL Applications 53
![Page 54: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/54.jpg)
Unit Testing ABL Applications 54
![Page 55: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/55.jpg)
Unit Testing ABL Applications 55
![Page 56: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/56.jpg)
Unit Testing ABL Applications 56
![Page 57: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/57.jpg)
Unit Testing ABL Applications 57
![Page 58: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/58.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
58
![Page 59: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/59.jpg)
Object oriented or procedural?
▪ Procedures can be unit tested
▪ In fact, ABLUnit supports the execution of test-procedures as well
▪ OO-thinking however simplifies writing testable code
▪ Procedural code has tendency to be monolithic
▪ “Mocking” of dependencies requires patterns such as factories or
dependency injection
– In theory possible with procedures
– More natural in object oriented programming
Unit Testing ABL Applications 59
![Page 60: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/60.jpg)
Writing testable code
▪ A huge financial report or invoice generation is barely testable in
whole
▪ Large
▪ May call sub routines
▪ If it fails, what has been causing this?
– A bug in code
– False assumptions
– Wrong data in DB?
▪ Output: A PDF file, how to assert this?
Unit Testing ABL Applications 60
![Page 61: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/61.jpg)
Writing testable code
▪ Break up financial report into a bunch of smaller components
▪ Test individual components
▪ Test report as a whole
▪ This allows to narrow down source of reported errors
▪ Separate report logic from output logic
– Financial report should return temp-tables first
• This can be tested
– A separate module produces PDF output based on temp-table
data
• Testing difficultUnit Testing ABL Applications 61
![Page 62: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/62.jpg)
Errors muts be THROWN
▪ BLOCK-LEVEL ON ERROR UNDO, THROW almost mandatory
▪ Alternative Form of solid error handling
▪ Unit Testing tools don’t capture ** Customer record not on file
(138) when written to stdout or a message box
Unit Testing ABL Applications 62
![Page 63: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/63.jpg)
Testing based on PROTECTED members
▪ When unit test is in a seperate class, it only has access to
PUBLIC methods of the class to be tested
▪ Making internal methods PUBLIC for the purpose of testing is the
wrong approach!
▪ Solution:
– Unit Test class can inherit from class to be tested to access
PROTECTED
– (some) Unit Test methods may be placed inside the class to be
tested to access PRIVATE members
– A combinationUnit Testing ABL Applications 63
![Page 64: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/64.jpg)
Sample
▪ Unit-Test of an PASOE Web Handler based on test inheriting from
the code to be tested
Unit Testing ABL Applications 64
![Page 65: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/65.jpg)
Unit Testing ABL Applications 65
![Page 66: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/66.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
66
![Page 67: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/67.jpg)
Mocking Dependencies
▪ Writing Unit Tests (for complex code) is permanent fight against
dependencies (and the bugs in them)
▪ If the PriceInfoService relies on the CustomerBusinessEntity, the
ItemBusinessEntity, an InventoryService and the framework’s
AuthorizationManager you’re always testing the integration of 5
components
▪ Who’s fault is it, when the test fails?
▪ How to we test extreme situations? Caused by unexpected data
returned from one of the dependencies?
Unit Testing ABL Applications 67
![Page 68: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/68.jpg)
Mocking Dependencies - Wikipedia
▪ “In object-oriented programming, mock objects are simulated
objects that mimic the behavior of real objects in controlled ways.
A programmer typically creates a mock object to test the behavior
of some other object, in much the same way that a car designer
uses a crash test dummy to simulate the dynamic behavior of a
human in vehicle impacts.”
▪ “In a unit test, mock objects can simulate the behavior of complex,
real objects and are therefore useful when a real object is
impractical or impossible to incorporate into a unit test. If an object
has any of the following characteristics, it may be useful to use a
mock object in its place.”Unit Testing ABL Applications 68
![Page 69: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/69.jpg)
Mocking
▪ Requires abstraction of object construction
▪ PriceInfoService should not NEW CustomerBusinessEntity as this
would disallow to mock this
▪ Rather rely on Dependency Injection or CCS Service Manager
component (or similar) to provide CustomerBusinessEntity or a
mock based on configuration
▪ Same technique applies to any other sort of dependent
components
Unit Testing ABL Applications 69
![Page 70: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/70.jpg)
Demo
▪ PriceInfoService based on Business Entities
Unit Testing ABL Applications 70
![Page 71: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/71.jpg)
CCS Business Entity getData instead of FIND in DB
Unit Testing ABL Applications 71
![Page 72: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/72.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
72
![Page 73: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/73.jpg)
Dealing with Data
▪ We’re using ABL to develop database applications
▪ Application functionality highly dependent on data in a database
▪ That’s a resource that’s difficult to deal with …
Unit Testing ABL Applications 73
![Page 74: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/74.jpg)
Don’t use a shared database for Unit Tests
▪ Your tests may reply on stock data or price data in the database
▪ A different developer may modify those records for his tests
▪ This can break your test
Unit Testing ABL Applications 74
![Page 75: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/75.jpg)
Don’t reuse your own database
▪ Your test sequence will include tests that modify data
▪ Maybe there is even a test to remove the item record that some
other test depends on
– Suddenly after adding this new test, a different test fails as the
database contents are no longer the same
Unit Testing ABL Applications 75
![Page 76: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/76.jpg)
Solutions to the database dependency
▪ Always restore a known database state from a backup
▪ Or rebuild a database for each test run from .d and .df
– This may be easier when the database schema may change
during a test sequence
▪ You may need to rebuild a database multiple times during a test
sequence
▪ Produces lots of Disk I/O
▪ Disk I/O on one of the SSD’s of the build server if the bottleneck in
out test suite (CPU and memory barely busy)
Unit Testing ABL Applications 76
![Page 77: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/77.jpg)
Transactions
▪ When used carefully database transactions can be a solution to
test modifying or deleting records
– Execute deletion of a record
– Test that it’s really gone (CAN-FIND)
– UNDO transaction in test-class
▪ May cause side-effects if the code to be tested is
Unit Testing ABL Applications 77
![Page 78: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/78.jpg)
Mock the code that access the database
▪ May follow OERA or CCS principles
▪ Data Access class should be the only code
that ever access the database
▪ Not even the business entity should be able
to tell that the data access class is using data
from a XML file instead
Unit Testing ABL Applications 78
Price Info Service
Item Business
Entity
Item Data Access
![Page 79: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/79.jpg)
Demo
▪ Mocking the Data Access using an XML file
Unit Testing ABL Applications 79
![Page 80: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/80.jpg)
Agenda
▪ Introduction
▪ A simple ABL Unit Test
▪ Structure of a Unit Test
▪ Unit Testing Tooling
▪ Writing testable code
▪ Mocking dependencies
▪ Dealing with Data
▪ Advanced Unit Testing Features
80
![Page 81: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/81.jpg)
Scenario driven Unit Tests
▪ Many Unit Tests are alike
▪ Testing read functionality of Business Entitiy a very repeating
tasks
▪ Should test for runtime performance characteristics
– Runtime (subject to system performance fluctuations)
– Records accessed in database
▪ Should test for values (e.g. calculated values)
▪ Tests can be expressed as scenario instead of code
Unit Testing ABL Applications 81
![Page 82: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/82.jpg)
SmartUnit Feature
▪ Unit Test tool of the SmartComponent Library
▪ https://documentation.consultingwerkcloud.com/display/SCL/Scen
ario+based+Unit+Tests+for+Business+Entity+FetchData+%28rea
d%29+operations
Unit Testing ABL Applications 82
![Page 83: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/83.jpg)
Markup Driven Assertions
▪ NumResults
▪ CanFind (allows to find for Unique Key + Calculated Field value)
▪ CanNotFind
▪ MaxRuntime (may fail, when test server is busy)
▪ MaxReads (in the database)
Unit Testing ABL Applications 83
![Page 84: Unit Testing ABL Applications - pugsa.orgpugsa.org/wp-content/uploads/2018/03/D2G2-MF-Unit_Testing.pdf · Agenda Introduction A simple ABL Unit Test Structure of a Unit Test Unit](https://reader030.vdocument.in/reader030/viewer/2022040623/5d4876c188c993fc4f8bd3cf/html5/thumbnails/84.jpg)
Questions
84http://www.consultingwerk.de/