有类声明如下:
public class TestA { interface ITest { string Test(); } ITest Test; } public class TestA { interface ITest { string Test(); } ITest Test; } |
在单元测试中需要使用TestA.Test属性,并为其赋值。
因为ITest接口和TestA.Test属性都是私有的,为了在单元测试中使用它们,需要为其生成专用访问器。
然后声明一个类A继承并实现接口,最后实例化类A为TestA.Test属性赋值,并调用。
class A : TestA_Accessor.ITest_Accessor { #region ITest_Accessor 成员 public string Test() { return "Success"; } #endregion } /// <summary> ///TestA 构造函数 的测试 ///</summary> [TestMethod()] public void TestAConstructorTest() { TestA_Accessor target = new TestA_Accessor(); target.Test = new A(); Assert.AreEqual("Success", target.Test.Test()); } class A : TestA_Accessor.ITest_Accessor { #region ITest_Accessor 成员 public string Test() { return "Success"; } #endregion } /// <summary> ///TestA 构造函数 的测试 ///</summary> [TestMethod()] public void TestAConstructorTest() { TestA_Accessor target = new TestA_Accessor(); target.Test = new A(); Assert.AreEqual("Success", target.Test.Test()); } |
运行测试后,发现测试失败了,错误信息为:类型“ServiceRetrieveTest.TestATest+A”的对象无法转换为类型 “PlatformClassLibrary.TestA+ITest”。错误发生在target.Test = new A();这个语句上,虽然类A继承了接口,但是ITest接口与他的专用访问器ITest_Accessor之间并不是简单继承关系,无法相互转化,导致测试失败。
研究后发现一个解决方法