@@ -55,35 +55,29 @@ def wrapper(**kwargs):
55
55
return decorator
56
56
57
57
58
- class Reloader :
59
- def __init__ (self , monkeypatch ):
60
- self .modules = []
61
- self .monkeypatch = monkeypatch
58
+ @pytest .fixture
59
+ def reload_module (monkeypatch , request ):
60
+ modules = []
62
61
63
- def __call__ ( self , module ):
64
- self . modules .append ((module , module .__dict__ .copy ()))
62
+ def reload_module ( module ):
63
+ modules .append ((module , module .__dict__ .copy ()))
65
64
return importlib .reload (module )
66
65
67
- def undo (self ):
68
- self . monkeypatch .undo ()
66
+ def undo ():
67
+ monkeypatch .undo ()
69
68
70
69
# previously, this would reload the module again,
71
70
# creating *new* versions of the old classes,
72
71
# which breaks some modules (e.g. pathlib).
73
72
# restoring the original attributes seems to work better.
74
- while self . modules :
75
- module , module_dict = self . modules .pop ()
73
+ while modules :
74
+ module , module_dict = modules .pop ()
76
75
module .__dict__ .clear ()
77
76
module .__dict__ .update (module_dict )
78
77
79
-
80
- @pytest .fixture
81
- def reload_module (monkeypatch ):
82
- reloader = Reloader (monkeypatch )
83
- try :
84
- yield reloader
85
- finally :
86
- reloader .undo ()
78
+ request .addfinalizer (undo )
79
+ with monkeypatch .context () as monkeypatch :
80
+ yield reload_module
87
81
88
82
89
83
@pytest .fixture
0 commit comments