Bonjour,

J'ai une class statique FeatEng important une variable app_client_instance, cette dernière créé un objet de type AppClient.
Je veux mocker les class app_client_instance and AppClient sauf FeatEng qui est statique.
Mais je ne sais comment passer le mocks à la classe statique FeatEng comme on n'a pas de constructeur dans les classes statiques.

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
 
 
app_client.py
-------------
class AppClient:
 
    def __init__(self):
        self.val = "true"
 
    def get_value(self, feature_eng):
        return self.val
....................................................
 
app_client_instance.py
----------------------
from app_client import AppClient
 
app_client_instance = AppClient()
....................................................
 
feat_eng.py
-----------
from app_client_instance import app_client_instance
 
class FeatEng:
 
    @staticmethod
    def is_activ(feature_eng):
        client = app_client_instance
        value = client.get_value(feature_eng)
        return "true" == value
 
....................................................
test.py
-------
 
 
import unittest
from unittest.mock import MagicMock
from app_client import AppClient
from app_client_instance import app_client_instance
from feat_eng import FeatEng
 
class FeatEngShould(unittest.TestCase):
 
    def test_mockmagshouldFalse(self):
        client = MagicMock(spec=AppClient, name=AppClient)
        client.get_value.return_value = "false"
        instance = MagicMock()
        instance.app_client_instance.return_value = client
        result = FeatEng.is_activ("MIG_ENG")
        self.assertFalse(result)

Merci