Recommendations on how to mock Rust pcap? #318
Replies: 8 comments
-
I think that adding traits in addition to the struct, thus creating a double implementation of everything will create an unnecessarily large maintenance burden. A refactor that increases mockability without additional overhead is welcome though. However, other than that I don't know how to mock rust pcap as I don't have much experience with mocking in rust myself. |
Beta Was this translation helpful? Give feedback.
-
I have recently been playing with Rust in a personal project of mine and refactoring such that the public interface is defined through traits, but implemented in structs is, now that I think of it, a much better approach. However, I personally don't have time to implement that. But if you (or somebody else) would like to, that is welcome. It would require a 2.0.0 release though, but that's fine as it sounds like the benefit would be significant enough. |
Beta Was this translation helpful? Give feedback.
-
trait in Rust are used "shared behavior" what behavior do you want a trait in pcap do ? The only thing that come to my mind is iterating the packet and for that I already put some work. What other behavior could we put on a trait that make sense ? Also, the system of state that avoid at compile time mistake would be impossible to replicate. |
Beta Was this translation helpful? Give feedback.
-
Anything that's a public interface. Then you can implement the interface with an actual struct when compiling the binary for real use or with a mock struct when compiling for testing. I use this in my other personal project and it really helps with mocking. It's also generally a good principle for both the user code and the implementation code to both rely on an abstract interface definition rather on concrete instances of each other. |
Beta Was this translation helpful? Give feedback.
-
I kind of disagree, that not the recommend way to code in rust, you can simply see the big decision of rust to not have a "collection" trait in std. Not a "Command" trait, etc... |
Beta Was this translation helpful? Give feedback.
-
If it's not the recommended way to do it Rust (I don't know, I only dabble in Rust in my spare time), do you know what the idiomatic way of implementing https://en.wikipedia.org/wiki/Dependency_inversion_principle in Rust is? |
Beta Was this translation helpful? Give feedback.
-
well there is not, rust is not OOP, it's data oriented, aka |
Beta Was this translation helpful? Give feedback.
-
Rust being OOP or not should not make it impossible to implement https://en.wikipedia.org/wiki/Dependency_inversion_principle. At its core, it just states to depend on abstractions (which in OOP is an In Rust this can be achieved with traits. Define an abstract interface using a trait, make the concrete implementation depend on the trait and make users depend on the trait. That way, you can simply replace both user and implementation code freely. |
Beta Was this translation helpful? Give feedback.
-
Hi - thanks for the great library!
To improve testing in my project, I'm trying to create a mock of the pcap library; specifically the Capture struct ... and it's not obvious how to do it. I'm looking at using 'mockall' because it allows you to mock structs and not just traits, but I still think I'll end up creating a wrapper trait that calls out the functions I need and then I can still use the
mockall::automock
feature. Has anyone else tackled this and come up with a better solution? Or alternatively, would the rust pcap community consider a patch that refactors Capture so that all functions are available through a trait in addition to the struct implementation to ease mocking, e.g.,Thoughts? I can't be the first person who thought about mocking this, so I'm hoping I'm just thinking about this wrong. If not, happy to put the patch together. Feedback welcome.
Thanks in advance.
Beta Was this translation helpful? Give feedback.
All reactions