У меня есть MethodInterceptionAspect, который я использую в модульных тестах (почему я делаю это - длинная история).
[MulticastAttributeUsage(MulticastTargets.Method,
AllowMultiple = false,
TargetMemberAttributes = MulticastAttributes.Instance | MulticastAttributes.Public)]
[AspectTypeDependency(AspectDependencyAction.Commute, typeof(TestWrapperAttribute))]
[Serializable]
public class TestWrapperAttribute : MethodInterceptionAspect
{
public override bool CompileTimeValidate( MethodBase method )
{
return true;
}
public override void OnInvoke(MethodInterceptionArgs args)
{
... // some code here
}
}
У меня есть базовый тестовый класс и производный тестовый класс
public class BaseTestClass
{
[TestFixtureSetUp]
public void BaseTestFixtureSetUp()
{ // ... code here
}
}
[TestFixture]
[TestWrapper]
public class DerivedTestClass : BaseTestClass
{
[TestFixtureSetUp]
public void TestFixtureSetUp()
{
}
// ... some more stuff here, Tests etc.
}
Теперь проблема в том, что OnInvoke моего аспекта выполняется в DerivedClass TestFixtureSetup, но не в базовом классе TestFixtureSetup.
Обратите внимание, что я прочитал единственный пост, который мог найти в этом направлении (я войду в ссылку позже), но это было о перехвате ToString (), и решением было определить ToString () в аспекте и вставить его как переопределение в классе. Эта ситуация отличается, так как я не знаю имя метода, имеющего атрибут TestFixtureSetup.