Giter Site home page Giter Site logo

Injecting static types about rstest HOT 5 OPEN

antimora avatar antimora commented on September 28, 2024
Injecting static types

from rstest.

Comments (5)

la10736 avatar la10736 commented on September 28, 2024

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.

antimora avatar antimora commented on September 28, 2024

@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.

la10736 avatar la10736 commented on September 28, 2024

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.

antimora avatar antimora commented on September 28, 2024

@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.

antimora avatar antimora commented on September 28, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.