Best practice configuring SASUnit - HMS-Analytical-Software/SASUnit GitHub Wiki

Introduction / Motivation

I use SASUnit alot in my daily life and in different customer projects. So for me there special needs like:

  • execute Tests quickly while developing
  • create SASUnit documentation only, for communication to the customer

So I tend to use more command shells and a more flexible run_all.sas. It takes more parameters from the shell as those in the download package.

These ideas should be shared hoping to help someone.

Switch to full screen view to get rid of horizotal scrollbars.

Here are some examples

Quick tests while developing

Command Shell (excerpts)

SET SASUNIT_ROOT=C:\Projekte\SASUnit_1.5.3
SET SASUNIT_OVERWRITE=0
SET SASUNIT_LANGUAGE=en
SET SASUNIT_HOST_OS=windows
SET SASUNIT_SAS_VERSION=9.3
SET SASUNIT_COVERAGEASSESSMENT=0
SET SASUNIT_PGMDOC=0
SET SASUNIT_PGMDOC_SASUNIT=0
SET SASUNIT_CROSSREFERENCE=0
SET SASUNIT_CROSSREFERENCE_SASUNIT=0

.......

echo "Starting SASUnit in Overwrite Mode ..."
"C:\Program Files\SASHome\x86\SASFoundation\9.3\sas.exe" 
  -CONFIG "sasunit.%SASUNIT_SAS_VERSION%.%SASUNIT_HOST_OS%.%SASUNIT_LANGUAGE%.cfg"
  -no$syntaxcheck -noovp -nosplash

run_all_en.sas

%LET ROOT_C   =<Project specific root path>;
%LET SASUnit  =<Project specific outputpath for SASUnit content>;
%LET SASUnit_P=%sysget(SASUNIT_ROOT);

OPTIONS MPRINT MAUTOSOURCE SASAUTOS=(SASAUTOS "&SASUnit_P.\saspgm\sasunit")
                validvarname=any;

%LET SASUNIT_VERBOSE=1;

%initSASUnit(
   i_root            = &ROOT_C.
  ,io_target         = &SASUnit.\%lowcase(%sysget(SASUNIT_LANGUAGE))
  ,i_overwrite       = %sysget(SASUNIT_OVERWRITE)
  ,i_project         = <Project Title>
  ,i_sasunit         = &SASUnit_P.\saspgm\sasunit
  ,i_sasautos        = 01_Macros
  ,i_testdata        = 01_Macros\99_UnitTests\Unit-Testdata\Testdaten
  ,i_refdata         = 01_Macros\99_UnitTests\Unit-Testdata\Referenzdaten
  ,i_sascfg          = &ROOT_C.\sasunit.%sysget(SASUNIT_SAS_VERSION).
                       %lowcase(%sysget(SASUNIT_HOST_OS)).
                       %lowcase(%sysget (SASUNIT_LANGUAGE)).cfg
  ,i_autoexec        = &ROOT_C.\90_SASUnit_cfg\KL\autoexec_
                       %lowcase(%sysget(SASUNIT_LANGUAGE)).sas
  ,i_testcoverage    = %sysget(SASUNIT_COVERAGEASSESSMENT)
  ,i_verbose         = &SASUNIT_VERBOSE.
  ,i_crossref        = %sysget(SASUNIT_CROSSREFERENCE)
  ,i_crossrefsasunit = %sysget(SASUNIT_CROSSREFERENCE_SASUNIT)
);

%runSASUnit(i_source = 01_Macros\99_UnitTests\%str(*)_test.sas);

%reportSASUnit(i_language      =%upcase(%sysget(SASUNIT_LANGUAGE))
              ,o_pgmdoc        =%sysget(SASUNIT_PGMDOC)
              ,o_pgmdoc_sasunit=%sysget(SASUNIT_PGMDOC_SASUNIT)
              );

Tests with program documentation, cross reference and testcoverage

This shell triggers the new feature program documentation for macros tested and SASUnit macros. Crossreference is created for all tested macros and coverage assesment is turned on.

Command Shell (excerpt)

SET SASUNIT_ROOT=C:\Projekte\SASUnit_1.5.3
SET SASUNIT_OVERWRITE=0
SET SASUNIT_LANGUAGE=en
SET SASUNIT_HOST_OS=windows
SET SASUNIT_SAS_VERSION=9.3
SET SASUNIT_COVERAGEASSESSMENT=1
SET SASUNIT_PGMDOC=1
SET SASUNIT_PGMDOC_SASUNIT=1
SET SASUNIT_CROSSREFERENCE=1
SET SASUNIT_CROSSREFERENCE_SASUNIT=0

Create SASUnit documentation without running tests

For this feature I'm using a separate SASUnit config file without a call to %run_sasunit.

Command Shell (excerpts)

SET SASUNIT_ROOT=C:\Projekte\SASUnit_1.5.3
SET SASUNIT_OVERWRITE=0
SET SASUNIT_LANGUAGE=en
SET SASUNIT_HOST_OS=windows
SET SASUNIT_SAS_VERSION=9.3
SET SASUNIT_COVERAGEASSESSMENT=0
SET SASUNIT_PGMDOC=1
SET SASUNIT_PGMDOC_SASUNIT=1
SET SASUNIT_CROSSREFERENCE=0
SET SASUNIT_CROSSREFERENCE_SASUNIT=0

....

echo "Starting SASUnit in Overwrite Mode ..."
"C:\Program Files\SASHome\x86\SASFoundation\9.3\sas.exe" 
       -CONFIG "sasunit.9.3.windows.en._report.only.cfg" -no$syntaxcheck 
       -noovp -nosplash

You need a different config file. The name of run_all.sas is now run_report_en.sas. This name is held in the config file.

run_report_en.sas

%LET ROOT_C   =<Project specific root path>;
%LET SASUnit  =<Project specific outputpath for SASUnit content>;
%LET SASUnit_P=%sysget(SASUNIT_ROOT);

OPTIONS MPRINT MAUTOSOURCE SASAUTOS=(SASAUTOS "&SASUnit_P.\saspgm\sasunit")
                validvarname=any;

%LET SASUNIT_VERBOSE=1;

%initSASUnit(
   i_root            = &ROOT_C.
  ,io_target         = &SASUnit.\%lowcase(%sysget(SASUNIT_LANGUAGE))
  ,i_overwrite       = %sysget(SASUNIT_OVERWRITE)
  ,i_project         = <Project Title>
  ,i_sasunit         = &SASUnit_P.\saspgm\sasunit
  ,i_sasautos        = 01_Macros
  ,i_testdata        = 01_Macros\99_UnitTests\Unit-Testdata\Testdaten
  ,i_refdata         = 01_Macros\99_UnitTests\Unit-Testdata\Referenzdaten
  ,i_sascfg          = &ROOT_C.\sasunit.%sysget(SASUNIT_SAS_VERSION).
                       %lowcase(%sysget(SASUNIT_HOST_OS)).
                       %lowcase(%sysget(SASUNIT_LANGUAGE)).cfg
  ,i_autoexec        = &ROOT_C.\90_SASUnit_cfg\KL\autoexec_
                       %lowcase(%sysget(SASUNIT_LANGUAGE)).sas
  ,i_testcoverage    = %sysget(SASUNIT_COVERAGEASSESSMENT)
  ,i_verbose         = &SASUNIT_VERBOSE.
  ,i_crossref        = %sysget(SASUNIT_CROSSREFERENCE)
  ,i_crossrefsasunit = %sysget(SASUNIT_CROSSREFERENCE_SASUNIT)
  );

%reportSASUnit(i_language      =%upcase(%sysget(SASUNIT_LANGUAGE))
              ,o_pgmdoc        =%sysget(SASUNIT_PGMDOC)
              ,o_pgmdoc_sasunit=%sysget(SASUNIT_PGMDOC_SASUNIT)
              ,o_force         =1
              );
⚠️ **GitHub.com Fallback** ⚠️