4

Shim を使用して、DataSyncCore というこのクラスのプライベート メソッドの 1 つをテストしようとしています。私は 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);

または、メソッドを内部としてマークし、そのメソッドを直接テストする必要がある場合は、assemblyinfo に InternalsVisibleTo 属性を設定できます。

于 2014-10-04T02:54:54.813 に答える