.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Test::Metrics::Any 3pm" .TH Test::Metrics::Any 3pm "2020-06-13" "perl v5.30.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" "Test::Metrics::Any" \- assert that code produces metrics via Metrics::Any .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& use Test::More; \& use Test::Metrics::Any; \& \& use Module::Under::Test; \& \& is_metrics_from( \& sub { Module::Under::Test::do_a_thing for 1 .. 5 }, \& { \& things_done => 5, \& time_taken => Test::Metrics::Any::positive, \& }, \& \*(Aqdo_a_thing reported some metrics\*(Aq \& ); \& \& done_testing; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This test module helps write unit tests which assert that the code under test reports metrics via Metrics::Any. .PP Loading this module automatically sets the Metrics::Any::Adapter type to \&\f(CW\*(C`Test\*(C'\fR. .SH "FUNCTIONS" .IX Header "FUNCTIONS" .SS "is_metrics" .IX Subsection "is_metrics" .Vb 1 \& is_metrics( \e%metrics, $name ) .Ve .PP Asserts that the current value of every metric named in the given hash reference is set to the value provided. Values can either be given as exact numbers, or by one of the match functions mentioned in \*(L"\s-1PREDICATES\*(R"\s0. .PP Key names in the given hash should match the name format used by Metrics::Any::Adapter::Test. Name components are joined by underscores, and any label tags are appended with spaces, as \f(CW\*(C`name:value\*(C'\fR. .PP .Vb 4 \& { \& "a_basic_metric" => 123, \& "a_labelled_metric label:here" => 456, \& } .Ve .PP This function only checks the values of metrics actually mentioned in the hash given as its argument. It is not a failure for more metrics to have been reported by the code under test than are mentioned in the hash. This helps to ensure that new metrics added in code do not break existing tests that weren't set up to expect them. .SS "is_metrics_from" .IX Subsection "is_metrics_from" .Vb 1 \& is_metrics_from( $code, \e%metrics, $name ) .Ve .PP Asserts the value of metrics reported by running the given piece of code. .PP The metrics in the test adapter are cleared, then the code is invoked, then any metrics are checked in the same manner as \*(L"is_metrics\*(R". .SH "PREDICATES" .IX Header "PREDICATES" As an alternative to expecting exact values for metrics, the following test functions can be provided instead to assert that the metric is behaving sensibly without needing to be an exact value. This could be useful for example when the exact number of bytes or timing measures can vary between test runs or platforms. .PP These predicates are not exported but must be invoked fully-qualified. .SS "positive" .IX Subsection "positive" .Vb 1 \& metric => Test::Metrics::Any::positive .Ve .PP Asserts that the number is greater than zero. It must not be zero. .SS "at_least" .IX Subsection "at_least" .Vb 1 \& metric => Test::Metrics::Any::at_least( $n ) .Ve .PP Asserts that the number at least that given \- it can be equal or greater. .SS "greater_than" .IX Subsection "greater_than" .Vb 1 \& metric => Test::Metrics::Any::greater_than( $n ) .Ve .PP Asserts that the number is greater than that given \- it must not be equal. .SH "AUTHOR" .IX Header "AUTHOR" Paul Evans