[R-pkg-devel] Is using global assignment in package tests allowed?
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Thu Jan 27 17:53:12 CET 2022
On 27/01/2022 11:24 a.m., James Pustejovsky wrote:
> I suppose, but this seems like kind of a far-fetched possibility if
> you're following any sort of reasonable scripting/development practices.
> Why in the world would someone be working with extremely valuable data
> and then decide to run all my package's unit tests interactively in the
> same session?
Perhaps "extremely" was an exaggeration, but it's not that far-fetched
for someone to notice a problem in your package and want to make a
change and test it.
Your first test stomps on oswald2013, V, mod_A, mod_B, mod_C1, and about
20 other variables. That seems kind of excessive to me.
Duncan Murdoch
>
> In any case, it sounds like I should either just skip these unit tests
> or try to figure out what the heck is causing my namespace problems with
> testthat.
>
> On Thu, Jan 27, 2022 at 10:11 AM Duncan Murdoch
> <murdoch.duncan using gmail.com <mailto:murdoch.duncan using gmail.com>> wrote:
>
> On 27/01/2022 10:56 a.m., James Pustejovsky wrote:
> > But I am not using global variables at all in the package code (in
> > /R)---only for unit testing. Is this distinction relevant? Or do
> I need to
> > avoid global assignment even in the unit tests?
>
> CRAN may let you do what you are doing, but as Dirk and Jeff said, it
> could come back to bite you later. For example, you may create a
> variable named foo containing extremely valuable data, and then run
> your
> test. (Tests can be run outside of R CMD check.) If your test stomps
> on foo, you'll lose all that data.
>
> It's worth using some trick like Dirk's to avoid this possibility.
>
> Duncan Murdoch
> >
> > On Thu, Jan 27, 2022 at 9:40 AM Dirk Eddelbuettel <edd using debian.org
> <mailto:edd using debian.org>> wrote:
> >
> >>
> >> On 27 January 2022 at 07:20, Jeff Newmiller wrote:
> >> | I don't know the answer to your question, but "beyond my ken"
> doesn't
> >> sound like a very convincing reason. Mucking with any
> environment that
> >> isn't yours is asking for trouble... the behavior you depend on
> today may
> >> come into conflict with the code you are coordinating with when
> you least
> >> expect it.
> >>
> >> Right on.
> >>
> >> Yes a number of packages (of mine and other people) use a different
> >> approach
> >> to maintain 'global state' without ... using 'global variables'
> (== bad).
> >>
> >> The trick is something like `pkgenv <- new.env()` in R/zzz.R and
> to then
> >> also
> >> set an option or two you need in .onLoad as eg
> `pkgenv[["prefence"]] <-
> >> "foo"`
> >> which you can later test for, alter, ... at will.
> >>
> >> All without running afould of what `R CMD check --as-cran` may
> hate, all
> >> the
> >> while maintaining your logic flow.
> >>
> >> Dirk
> >>
> >> --
> >> https://dirk.eddelbuettel.com <https://dirk.eddelbuettel.com> |
> @eddelbuettel | edd using debian.org <mailto:edd using debian.org>
> >>
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-package-devel using r-project.org
> <mailto:R-package-devel using r-project.org> mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-package-devel
> <https://stat.ethz.ch/mailman/listinfo/r-package-devel>
>
More information about the R-package-devel
mailing list