解决方法很简单,就是将ITest接口声明为Pubic,这样在测试代码声明类A就可以直接继承这个接口。
class A : TestA.ITest { #region ITest_Accessor 成员 public string Test() { return "Success"; } #endregion } class A : TestA.ITest { #region ITest_Accessor 成员 public string Test() { return "Success"; } #endregion } |
再次运行测试,发现target.Test = new A();这个语句可顺利执行,测试成功。
但是,这个方法的缺点在于,接口ITest只是类TestA的内部使用的接口,现在却将其暴漏在外部,有些不理想。
找到一个相对完美的解决方案。
可以将接口在命名空间下声明为internal,即声明为内部接口。同时在被测试的项目中添加System.Runtime.CompilerServices.InternalsVisibleTo标签,该标签表示该项目的内部成员可向某一项目公开,如[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("ServiceTest")]
这样就可以在测试项目中使用用Internal声明的代码。
在测试代码时就可以继承ITest接口并实现。
注意继承时要同时继承ITest接口和他的专用访问器ITest_Accessor接口。
测试的类声明如下
class A : ITest_Accessor, ITest { #region ITest 成员 public string Test() { return "a"; } #endregion } class A : ITest_Accessor, ITest { #region ITest 成员 public string Test() { return "a"; } #endregion } |
然后用下面的代码进行测试
/// <summary> ///testAA 构造函数 的测试 ///</summary> [TestMethod()] public void testAAConstructorTest() { TestA_Accessor target = new TestA_Accessor(); target.Test = new A(); Assert.AreEqual("a", target.Test.Test()); } /// <summary> ///testAA 构造函数 的测试 ///</summary> [TestMethod()] public void testAAConstructorTest() { TestA_Accessor target = new TestA_Accessor(); target.Test = new A(); Assert.AreEqual("a", target.Test.Test()); } |
运行,测试成功通过。