can you test nested functions in scala?

后端 未结 2 776
遥遥无期
遥遥无期 2021-02-14 10:00

Is there any way to test a nested function (ideally with ScalaTest)?

For example, is there a way to test g() in the below code:

def f() = {
         


        
相关标签:
2条回答
  • 2021-02-14 10:42

    You could make method private[package-name] - still breaks design a bit, but keeps it private instead of protected.

    Generally I agree with the fact that one should not test private methods, but if you are maintaining poorly written code...

    private[example] def g() = "a string!"
    
    def f() = {
      g() + "– says g"
    }
    

    Now test in same package (example) could test g()

    0 讨论(0)
  • 2021-02-14 10:53

    g is not visible outside of f, so I daresay no, at least not without reflection.

    I think testing g would break the concept of unit testing, anyway, because you should never test implementation details but only public API behaviour. Tracking an error to a mistake in g is part of the debugging process if tests for f fail.

    If testing g is important for you, define g as (protected) method outside of f. That might break your design, though.

    Another idea would be to put calls to assert after the call of g in the original code. This will be executed during tests and raise an exception if the property does not hold, causing the test to fail. It will be there in regular code, too, but can be removed by the compiler as assert (and companions) are elidible (see e.g. here).

    0 讨论(0)
提交回复
热议问题