Из документации (выделено мое):
Если
blockquote>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()
Ваш код полностью неверен.
Вы просматриваете каждый тип , имеющий атрибут, который не находит никаких типов.
Вам нужно перебрать каждый метод для каждого типа и проверить, есть ли у него ваш атрибут.
Например:
var methods = assembly.GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => m.GetCustomAttributes(typeof(MenuItemAttribute), false).Length > 0)
.ToArray();
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(){}
}