我正在尝试使用Shim在名为DataSyncCore的此类中测试我的私有方法之一。
抱歉,如果这太琐碎,因为我不熟悉shimm,无法弄清楚为什么这会给我一个错误,提示“该属性或索引器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"));
   }
}

最佳答案

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

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

或者,如果您想/需要直接测试该方法,则可以将该方法标记为internal,并在assemblyinfo中设置InternalsVisibleTo属性。

09-11 22:30