Search code examples
unit-testingrust

How should Rust unit tests be organised?


I have a number of methods in a mod. These methods need to be tested but they're private. I currently have the unit tests inside the same mod, but I'm not sure this is the right way to go about it, as I'm mixing two different things.

Should I put my unit tests in a different file? If so, how do I test private methods?


Solution

  • It's recommended to place tests in their own module. This module should be a child of the module whose code you want to test (and it can be defined in the same or different file).

    #[cfg(test)]
    mod tests {
        #[test]
        fn test_some_stuff() {
          // ... test code ...
        }
    }
    

    Private methods are not private to child modules, but you still need to import them with use super::some_name;.

    By the way, this is all explained in the test organization section (11.3) of the Rust Book.