This crate provides the #[test_case] procedural macro attribute that generates multiple parametrized tests using one body with different input parameters.
A test is generated for each data set passed in the test_case attribute.
Under the hood, all test cases that share the same body are grouped into a mod, giving clear and readable test results.
What's changed
New features
=> with |x: T| assert!(x) custom inline test assertions
=> using path::to::fn custom fn test assertions
ignore and inconclusive can be combined with other keywords
=> it|is ... syntax is a built-in (previously required hamcrest2 crate integration)
Simple test cases support returning Result<(), _> as #[test] attribute does #50
Improvements
Code refactoring
Test function is kept in its original scope so it can be reused for non-test related code #77
Improved test case name selection
Breaking changes
Deprecation of inconclusive within test description string - it will no longer act like modifier keyword
Removal of hamcrest2 integration (it and is are kept, complex assertions now have different syntax)
Custom inline test assertions
Now it is possible to pass the closure which will assert the test case.
=> with |x: T| assert!(x) custom inline test assertions
=> using path::to::fn custom fn test assertions
ignore|inconclusive can be combined with other keywords (eg.: => ignore matches Ok(_))
=> it|is ... syntax is a built-in (previously required hamcrest2 crate integration)
Tested items are left in place where they were defined #77
Simple test cases allow Result<(), _> return types similar to native #[test] macro
Improvements
Significant code refactoring
Improved test case name selection
Breaking changes
Deprecation of inconclusive within test description string - it will no longer act like modifier keyword
Deprecation of hamcrest2 integration
Deprecation of allow_result feature
V1.2.3
Fix regression where panics and inconclusive were not allowed on test_cases returning a value
Fix case where test_case would allow to return a type when only single attribute was used
V1.2.2
test-case no longer allows returning values from tested function without => pattern (thanks to @tarka)
Behaviour can be reenabled via allow_result feature
V1.2.1
Disabled clippy warning when test-case was generating assert_eq(bool, bool) expression.
V1.2.0
New features
Allow usage of fully qualified attribute #[test_case::test_case] (thanks to @tomprince)
Improvements
Stopped code from emmiting unneded () expression in test cases with expected fragment (thanks to @martinvonz)
V1.1.0
New features
Added support for using hamcrest2 assertions with test case
Enabled support of async via tokio or similar
Enabled attribute passthrough for test cases - it means that you can combine test-case with other testing frameworks,
given at least one #[test_case] attribute appears before mentioned framework in testing function
Deprecation
inconclusive inside test case name will not be supported starting 2.0.0
V1.0.0
New features
Added support for three new keywords: panics, matches and inconclusive which can be applied after => token.
... (truncated)
Commits
6301fbd Improve readme & changelog. Publish version 2.0.0.
1c43651 Update README. Move most of technical documentation to our wiki.
26e0fc4 Omit line with full path to hash-encoded dir
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Updates the requirements on test-case to permit the latest version.
Release notes
Sourced from test-case's releases.
... (truncated)
Changelog
Sourced from test-case's changelog.
... (truncated)
Commits
6301fbd
Improve readme & changelog. Publish version 2.0.0.1c43651
Update README. Move most of technical documentation to our wiki.26e0fc4
Omit line with full path to hash-encoded dirc7ca456
Revert echo's in publish.sh4b139fe
Bump version to2.0.0-rc3
.c7a098c
Tweak test_case handling (#88)f4edb1d
Update README to mention rc29950c3e
Relaxed requirements on 'using' keyword in complex test cases.70bff0b
Add newlines to publish.sh 'Next steps' echof848378
Bump MSRV to 1.49. Adjust template. Release 2.0.0-rc2Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)