Comments (5)
Sorry, but I'm not sure to have understood your question. Do you want to write some tests and apply them on the 2 backends?
Something like the follow code?
trait MyTrait {
fn get() -> u32;
}
struct A;
struct B;
impl MyTrait for A {
fn get() -> u32 {
42
}
}
impl MyTrait for B {
fn get() -> u32 {
84
}
}
use rstest::rstest;
use std::marker::PhantomData;
#[rstest]
#[case(PhantomData::<A>)]
#[case(PhantomData::<B>)]
fn test_get<T: MyTrait>(#[case] _a: PhantomData<T>) {
assert_eq!(T::get() % 2, 0);
}
You can also use rstest_reuse
to spread these cases to some tests.
from rstest.
@a10736, thank you so much for you suggestion and great examples. rstest_reuse
is a great pointer. I didn't know about it.
Continuing with your example, let me clarify.
Basically, I need to have MyTrait
and the unit tests defined in crate "MyTraitAndTests". And the trait implementations in "ImplA" and "ImplB" crates, which will consume the unit tests defined in "MyTraitAndTests". It would very convenient when I import the unit tests, I can pass type A (that implements MyTrait) to a whole suit without referencing individual methods. It seems rstest_reuse
supports such use case, correct?
from rstest.
Maybe what you need are contract tests. There's a nice way to implement contract tests that's just work for integration tests.
Look at [email protected]:la10736/contract_tests_example.git and let me know if it's what you're looking for. The nice thing here if that is the tests itself that ask for the implementation to use and you import the module with the tests for each dependency that you would tests. Is a sort of Dependency Injection.
from rstest.
@la10736 Thank you. I will look into this. Here is the link that takes directly to the repo: https://github.com/la10736/contract_tests_example
from rstest.
Maybe what you need are contract tests. There's a nice way to implement contract tests that's just work for integration tests.
Look at [email protected]:la10736/contract_tests_example.git and let me know if it's what you're looking for. The nice thing here if that is the tests itself that ask for the implementation to use and you import the module with the tests for each dependency that you would tests. Is a sort of Dependency Injection.
I will check it out and report back. Thank you.
from rstest.
Related Issues (20)
- skip cases based on feature flag? HOT 5
- `#[once]` fixtures are unsound for types that are not `Sync` HOT 4
- clippy::duplicated_attributes warning with rust 1.79.0-nightly HOT 3
- By-reference fixtures HOT 12
- Update `rstest_reuse` docs and release new version
- `#[from(source)]` should accept path also and not just idents
- rstest_reuse: "the `async` keyword is missing from the function declaration" HOT 1
- replace return <expr>; with <expr> [needless_return] HOT 3
- Support dynamic `#[values]` HOT 1
- Feature: Optional label in the `#[case...]` HOT 1
- Dynamically set #[values(..)] HOT 1
- New test files are only recognized after `cargo clean` HOT 4
- feat: provide a cargo feature to disable the proc macro inference in #221 HOT 2
- consider adding a `wasm-bindgen` feature HOT 2
- Recommendation on choosing between different sets of `#[values(...)]`?
- Mixing `#[rstest]` and `#[serial]` breaks VS Code's IntelliSense with rust-analyzer HOT 3
- Possibility of resolving a fixture only once per test?
- Automatically test all variants of an enum HOT 1
- unused warning for case variables used by fixture #[with(var)] HOT 1
- Can #[files] use relative paths HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rstest.