Альтернативы для Object Ориентированное программирование?

Из документации (выделено мое):

Если patch() используется в качестве декоратора , а new опущено , созданный макет передается в качестве дополнительного аргумента декорированной функции.

При явном использовании new декоратор не передает макетируемый объект в качестве параметра (предположительно потому, что он ожидает, что у вас уже есть ссылка, которую можно использовать без аргумента).

В этом случае обходным решением будет настройка макета после того, как он был передан в ваш тест:

class SampleTest(TestCase):

    @mock.patch('tests.f')
    def test_f(self, mocked_f):
        mocked_f.return_value = 8
        # or
        # mocked_f.side_effect = lambda: 8
        f()
        mocked_f.assert_called()
48
задан Nate Barbettini 29 September 2015 в 01:43
поделиться

2 ответа

Ваш код полностью неверен.
Вы просматриваете каждый тип , имеющий атрибут, который не находит никаких типов.

Вам нужно перебрать каждый метод для каждого типа и проверить, есть ли у него ваш атрибут.

Например:

var methods = assembly.GetTypes()
                      .SelectMany(t => t.GetMethods())
                      .Where(m => m.GetCustomAttributes(typeof(MenuItemAttribute), false).Length > 0)
                      .ToArray();
85
ответ дан 26 November 2019 в 18:40
поделиться
var class = new 'ClassNAME'();
var methods = class.GetType().GetMethods().Where(m=>m.GetCustomAttributes(typeof(MyAttribute), false).Length > 0)
.ToArray();

Теперь у Вас есть все методы с этим атрибутом 'MyAttibute' в классе. Можно вызвать его где угодно.

public class 'ClassNAME': IDisposable
 {
     [MyAttribute]
     public string Method1(){}

     [MyAttribute]
     public string Method2(){}

     public string Method3(){}
  }
0
ответ дан Unknown Artist 26 November 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: