我在单元测试中使用了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属性的方法的名称。