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

发表于:2009-11-17 14:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  解决方法很简单,就是将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());
          }

  运行,测试成功通过。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号