4

我正在尝试使用 Shim 来测试我在这个名为 DataSyncCore 的类中的私有方法之一。抱歉,如果这太微不足道了,因为我是 shim 的新手并且无法弄清楚为什么这会给我一个错误,说“属性或索引器 GetEnvironmentString 不能在这种情况下使用,因为它缺少访问器。如何解决这个问题?

//Method to be tested inside DataSyncCore Class 
private Environments GetEnvironment(string env)
{
   string environment = env.ToLower();

   switch (environment)
   {
      case "dev":
         return Environments.Dev;
      case "qc":
         return Environments.QC;
      case "uat":
         return Environments.UAT;
      case "prod":
         return Environments.PROD;
      default:
         return Environments.Dev;
   }
}

这是我的单元测试:

[TestMethod]
public void DataSyncCore_GetsEnvironment_Succeeded()
{
   using (ShimsContext.Create())
   {
      var core = new ShimDataSyncCore()
      {
         GetEnvironmentString = (dev) =>
         {
            return Environments.Dev;
         }
      };
      Assert.AreEqual(Environments.Dev, core.GetEnvironmentString("dev"));
   }
}
4

1 回答 1

1

如果您无法公开该类,您仍然可以使用 Activator.CreateInstance:

var anInstance = (YourPrivateClass)Activator.CreateInstance(typeof(YourPrivateClass), true);

或者,如果您想/需要直接测试该方法,您可以将该方法标记为内部方法并在您的程序集信息中设置 InternalsVisibleTo 属性。

于 2014-10-04T02:54:54.813 回答