使用Shims测试私有方法

时间:2013-07-11 14:59:43

标签: unit-testing testing mstest shim

我正在尝试使用Shim来测试这个名为DataSyncCore的类中的一个私有方法。 抱歉,如果这是太小事了,因为我是垫片的新手,并且无法弄清楚为什么这会给我一个错误说“属性或索引器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"));
   }
}

1 个答案:

答案 0 :(得分:1)

如果你不能公开课,你仍然可以使用Activator.CreateInstance:

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

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