zam_test 0.5.0
zam_test: ^0.5.0 copied to clipboard
A typed wrapper around the test package with several utilities for testing.
Zam Test Library #
zam_test is a typed version of the test package.
What's inside the package #
Includes the following core components.
Check out all the components in detail here
How to use #
Summary #
Testis the main class. It has two constructor methods, theTest.singleand theTest.multi. If your test is simple and has only one case, then useTest.single.TestCaseis something that is wrapped inside aTest.multiple. Avoid using aTestCasedirectly.TestGroupis used to run multipleTesttogether.
Test #
Test can be seen as the typed version of test() function in the original test package. Mostly a Test will have multiple cases based on different inputs. For example, a login test has multiple test cases based on different inputs like wrong username, wrong password, correct username and password, etc. A Test can also have a single test case. Therefore, we have MultiCasedTest and SingleCasedTest respectively to address these.
You can also create a new test by extending Test by following the steps given below.
- Create a class extending
Test. - Provide a
name. - Override
runfunction which is called for everyTestCase. - Provide a list of
cases. - Override
intializeanddisposewhen required. - You can customize the
nameSuffixand thedescriptiontoo.
class HeightTest extends Test<double, String> {
@override
final name = 'Height';
@override
run(input) {
return Height(input).toStringInMetre();
}
@override
final cases = [
NegativeTestCase(
when: 'Negative height value',
input: -23,
exception: HeightNotValidException,
),
NegativeTestCase(
when: 'Zero height value',
input: 0,
exception: HeightNotValidException,
),
ValueTestCase(
when: 'Positive Border height value',
then: 'outputs value in m',
input: 1,
output: '0.01 m',
),
];
}
void main() {
HeightTest().execute();
}
TestGroup #
TestGroup is used to run multiple Test together. It is more of a utility class. You can run tests without this.
void main() {
TestGroup('BMI', [
HeightTest(),
// WeightTest(),
// HeightTest(),
// BmiCategoryTest(),
// ...
// ...
// ... (you can add more test groups here)
]).execute();
}
TestCase #
It accepts two descriptive texts when and then, an input, a matcher and an optional callback called the action.
CONSIDER: Always consider executing it inside a Test class even when you want to run a single test case which is accomplished using Test.single constructor.
Simple way to execute a TestCase is as follows.
void main() {
ValueTestCase(
when: 'Positive Border height value',
then: 'outputs value in m',
input: 1.0,
output: '0.01 m',
action: (double input) => Height(input).toStringInMetre(),
).execute();
}
Currently we have provided the following test case types which derive from TestCase. We expect this list to grow in the future to handle various scenarios. Until then you can use TestCase since it accepts a custom matcher.
- ValueTestCase - To match direct values.
- NegativeTestCase - To match exceptions.
- BooleanTestCase - To match booleans.
To learn more, move on to the example section or check out these dedicated examples in github.
Customization #
You can override the following at the moment.
TestCase->descriptionDelimiter- Defaults to' -> '.TestCase-> description - It is generated by combining thewhenandthentexts with adescriptionDelimiterin between.Test->nameSuffix- Defaults to':'.Test->description- It is generated by combiningnameandnameSuffix.TestGroup->nameSuffix- Defaults to' -'.TestGroup->description- It is generated by combiningnameandnameSuffix.