c# – 从ContextBoundObject继承并使用ContextAttribute修饰的单元测试类

我正在尝试将单元测试改进到一些现有的代码库.我想要进行单元测试的类和方法都使用从ContextBoundObject和ContextAttribute继承的自定义属性进行修饰.我不希望它们作为单元测试的一部分运行.

我想出的唯一解决方案是在我想进行单元测试时编译属性.我不喜欢这个解决方案,并希望在运行时用mocked属性替换它,或者阻止属性以更优雅的方式运行.

如何对具有继承自ContextBoundObject和ContextAttribute的类和方法属性的代码进行单元测试,这些属性不希望作为单元测试的一部分运行?

提前致谢.

最佳答案 从ContextBoundObject继承的类通过传递消息而不是传统的基于堆栈的执行模型来执行方法.此功能用作远程处理和COM互操作的基础.其中一个有趣的选择是可以使用属性拦截方法调用,这允许一种“穷人的AOP”.

摆脱属性提供的逻辑的一个选项是创建一个配置文件来覆盖在新类时创建的类.此功能仅适用于继承自MarshalByRef的类,后者是ContextBoundObject的基类.

另一种选择可能是使用反射创建类的实例.也就是说,找到特定的ConstructorInfo并调用它来创建实例.当您只是“新”一个实例时,调用将被路由到Activator.CreateInstance,它可能为您提供实际类的代理对象.直接创建对象可能会绕过这个,尽管它是在黑暗中拍摄的.

点赞