On Mon, 5 Apr 2021 at 14:26, Cameron Simpson <c...@cskk.id.au> wrote: > On 05Apr2021 13:56, David <bouncingc...@gmail.com> wrote:
> >Thanks for confirming my suspicions so quickly. What you wrote > >makes sense, but there are two points that still puzzle me. > >1) The final line of the pytest failure output seems to shows that > > pytest did capture (or is at least aware of) the stderr message > > from module_2. > Yes. Unsure what's going on there. It could be timing. Suppose this > happens: > - pytest pushes a capturing stderr onto sys.stderr > - pytest loads your module, which imports module_1 and module_2 > - the test runner pushes a separate stderr capturer for the test? > - module_1 finds the per-test sys.stderr value > - module_2 finds pytest's outermost capturer (present when it was > imported), and doesn't look up sys.stderr at test time, instead using > the outer capturer Ok. I do understand that my function parameter defaults are defined when the function is defined, so something like this could happen. > >2) My actual code that I would like to test does look like module_2. > > Is there any way to test it with pytest? > I'd be inclined to give msg() an optional file= parameter: Understood. > If you truly need to test msg() _without_ the file= parameter, you could > monkey patch module_2: I tried this, it works too. Thanks so much for your guidance! It's great to be steered through puzzlement by experts. I hope you're having a good day, you made mine better :) -- https://mail.python.org/mailman/listinfo/python-list