【问题标题】:Unit Testing Private Methods in Unity Test RunnerUnity Test Runner 中的单元测试私有方法
【发布时间】:2019-11-14 07:40:16
【问题描述】:

我想在 C# 中对我的私有方法进行单元测试。由于这些方法是私有的,因此无法从测试环境中访问它们。

【问题讨论】:

标签: c# visual-studio unit-testing unity3d private-methods


【解决方案1】:

我想办法这样做:

  1. 转到 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblies\ 并将文件 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 复制到 Unity 项目中的文件夹中。
  2. 在“Tests”文件夹中的 .asmdef 文件中引用该文件:
  3. 在您的 c# 测试脚本中,您现在可以访问此添加 using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. 实例化您的类的实例,其中包含用于测试和创建私有对象的方法。如果您要测试的方法是静态的,请改为创建私有类型:
    public class MyClass
    {
        private static int AddOne(int i)
        {
            return i += 1;
        }
        private int SubOne(int i)
        {
            return i -= 1;
        }
    }

    MyClass myClass = new MyClass();
    PrivateType privateTypeMyClass = new PrivateType(myClass.GetType());
    int res1 = (int)privateTypeMyClass .InvokeStatic("AddOne", 2);
    PrivateObject privateObjectMyClass = new PrivateObject(myClass);
    int res2 = (int)privateObjectMyClass.Invoke("AddOne", 2);
  1. 如果您想传递多个参数,可以使用obj[] 来传递这些参数。

【讨论】:

    【解决方案2】:

    不建议为private 方法编写单元测试。您应该只为public 方法编写测试,因为调用者仅通过公共方法和属性与您的类交互。在流程中,private 方法由public 方法调用。因此,编写您的测试,以便它们调用 public 方法并通过不同的流程覆盖 private 方法。通过这种方式,您还可以知道您的代码中是否有一些未使用的private 方法可以删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-25
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      相关资源
      最近更新 更多