单元测试中设置被测试类接口的值

来源:互联网 发布:义乌淘宝打包员招聘 编辑:程序博客网 时间:2024/05/23 15:28
 

有类声明如下:

 

在单元测试中需要使用TestA.Test属性,并为其赋值。

因为ITest接口和TestA.Test属性都是私有的,为了在单元测试中使用它们,需要为其生成专用访问器。

然后声明一个类A继承并实现接口,最后实例化类A为TestA.Test属性赋值,并调用。

运行测试后,发现测试失败了,错误信息为:类型“ServiceRetrieveTest.TestATest+A”的对象无法转换为类型“PlatformClassLibrary.TestA+ITest”。错误发生在target.Test = newA();这个语句上,虽然类A继承了接口,但是ITest接口与他的专用访问器ITest_Accessor之间并不是简单继承关系,无法相互转化,导致测试失败。

研究后发现一个解决方法

解决方法很简单,就是将ITest接口声明为Pubic,这样在测试代码声明类A就可以直接继承这个接口。

再次运行测试,发现target.Test = new A();这个语句可顺利执行,测试成功。

但是,这个方法的缺点在于,接口ITest只是类TestA的内部使用的接口,现在却将其暴漏在外部,有些不理想。

 

2009-11-6更新

找到一个相对完美的解决方案。

可以将接口在命名空间下声明为internal,即声明为内部接口。同时在被测试的项目中添加System.Runtime.CompilerServices.InternalsVisibleTo标签,该标签表示该项目的内部成员可向某一项目公开,如[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("ServiceTest")]

这样就可以在测试项目中使用用Internal声明的代码。

在测试代码时就可以继承ITest接口并实现。

注意继承时要同时继承ITest接口和他的专用访问器ITest_Accessor接口。

测试的类声明如下

 

然后用下面的代码进行测试

运行,测试成功通过。

 

 

原创粉丝点击